閉包函數:python
什麼是閉包函數:閉包
閉指的是定義在一個函數內部app
包指的是該函數包含對外部做用域(非全局做用域)名字的引用函數
def counter(): n=0 def incr(): nonlocal n x=n n+=1 return x return incr c=counter() print(c())
閉包的意義:返回的函數對象,不單單是一個函數對象,在該函數外還包裹了一層做用域,這使得,該函數不管在何處調用,優先使用本身外層包裹的做用域
裝飾器對象
1.什麼是裝飾器blog
就目前來看:裝飾器就是定義一個函數,只不過該函數的功能是用來爲其它函數添加額外的功能的作用域
其實:裝飾器自己其實能夠是任意可調用的對象,開發
被裝飾的對象也能夠是任意可調用的對象。class
2.爲何要用裝飾器import
軟件維護應該遵循開發封閉原則:
開放封閉原則指的是:
①軟件一旦上線運行後對修改源代碼是封閉的
②對擴展功能是開放的
這就用到了裝飾器
裝飾器的實現必須遵照兩大原則:
①不可修改被裝飾對象的源代碼
②不可修改被裝飾對象的調用方式
import time def timmer(func): def wrapper(*args,**kwargs): start_time=time.time() res=func(*args,**kwargs) stop_time=time.time() print('run time is %s' %(stop_time-start_time)) return res return wrapper @timmer def foo(): time.sleep(3) print('from foo') foo()
其實@表明語法糖
@timmer 表示foo = timmer(foo)