閉包:
將組成函數的語句和這些語句的執行環節打包到一起所得到的對象。
當使用嵌套函數(函數中定義函數)時,閉包將捕獲內部函數執行所需的整個環境。
此外,嵌套函數可以使用被嵌套函數中的任何變量,就行普通函數中可以引用全局變量一樣。
e.g.
x=14
def f():
x=3
def b():
return x
return b
y=f()
print(y())
輸出:
3
裝飾器
對函數參數或返回值等進行加工處理,生成一個功能增強版的一個函數。
裝飾器的參數是一個函數或者類,專門針對類或者函數進行加工處理。
使用@來實現,定義裝飾器用於裝飾函數時,使用@裝飾器名稱,放在函數或類定義行前
e.g.
import time
def deco(f):
def wrapper():
startTime = time.time()
f()
endTime = time.time()
msecs = (endTime - startTime)*1000
print("time is %d ms" %msecs)
return wrapper
@deco
def func():
print("hello")
輸出:
hello
world
time is 1000 ms
time.sleep(1)
print("world")
if __name__ == '__main__':
f = func #這裏f被賦值爲func,執行f()就是執行func()
f()