Flutter原始碼剖析(一):原始碼獲取與構建
阿新 • • 發佈:2020-11-01
裝飾器的功能:在不修改原函式及其呼叫方式的情況下對原函式功能進行擴充套件 裝飾器的本質:就是一個閉包函式 裝飾器的固定格式 def timer(func): def inner(*args,**kwargs): '''執行函式之前要做的''' re = func(*args,**kwargs) '''執行函式之後要做的''' return re return innert('from foo') foo() 裝飾器的固定格式——wraps版 from functools import wraps defdeco(func): @wraps(func) #加在最內層函式正上方 def wrapper(*args,**kwargs): return func(*args,**kwargs) return wrapper 有參裝飾器 def auth(driver='file'): def auth2(func): def wrapper(*args,**kwargs): name=input("user: ") pwd=input("pwd: ")if driver == 'file': if name == 'xxx' and pwd == '123': print('login successful') res=func(*args,**kwargs) return res elif driver == 'ldap': print('ldap') return wrapper return auth2 @auth(driver='file') def foo(name): print(name) foo('xxx') 多個裝飾器裝飾同一個函式 def wrapper1(func): def inner(): print('wrapper1 ,before func') func() print('wrapper1 ,after func') return inner def wrapper2(func): def inner(): print('wrapper2 ,before func') func() print('wrapper2 ,after func') return inner @wrapper2 @wrapper1 def f(): print('in f') f()