1. 程式人生 > 實用技巧 >Flutter原始碼剖析(一):原始碼獲取與構建

Flutter原始碼剖析(一):原始碼獲取與構建

 
裝飾器的功能:在不修改原函式及其呼叫方式的情況下對原函式功能進行擴充套件
裝飾器的本質:就是一個閉包函式

裝飾器的固定格式
def timer(func):
    def inner(*args,**kwargs):
        '''執行函式之前要做的'''
        re = func(*args,**kwargs)
        '''執行函式之後要做的'''
        return re
    return innert('from foo')
foo()


裝飾器的固定格式——wraps版
from functools import wraps

def
deco(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()