python學習【第四篇】python函數 (二)
阿新 • • 發佈:2018-05-06
運行時 本質 接收參數 hello 函數 作用域 返回 高階函數 clas
一、裝飾器
裝飾器:本質就是函數,功能是為其它函數添加附加功能
裝飾器的原則:
- 不修改被修飾函數的源代碼
- 不修改被修飾函數的調用方式
裝飾器的知識儲備:
裝飾器 = 高階函數 + 函數嵌套 + 閉包
二、高階函數
高階函數的定義:
- 函數的接收參數是一個函數名
- 函數的返回值是一個函數名
- 滿足上述條件任意一個都可以是高階函數
import time def fun1(): time.sleep(0.5) print("hello") def computing_run_time(fun): """ 計算函數運行時間 :param fun: :return:函數的接收參數是函數名""" start_time = time.time() fun() end_time = time.time() print("運行時間%s" % (end_time - start_time)) computing_run_time(fun1) """ 優點:在不修改函數源代碼的前提下,給函數添加了額外的功能 缺點:改變了調用方式 """
import time def fun1(): time.sleep(0.5) print("hello") def computing_run_time(fun):函數的返回值是函數名""" 計算函數運行時間 :param fun: :return: """ fun() return fun fun1 = computing_run_time(fun1) fun1() """ 優點:沒有改變函數的調用方式 缺點:不能為函數添加新的功能 """
註:僅僅是高階函數不能滿足裝飾器的需求
三、函數嵌套和閉包
""" 閉包:首先必須是內部定義的函數,該函數包含對外部作用域而不是全局作用域名字的引用 定義:內部函數的代碼包含對外部函數的代碼的引用,但一定不是對全局作用域的引用 """ def fun1(): print("fun1") name = 1 def fun2(): print("fun2") print(name) def fun3(): print("fun3") print(name) fun3() fun2() fun1()
python學習【第四篇】python函數 (二)