python函數裝飾器的使用
阿新 • • 發佈:2017-11-04
return == oba 閉包 影響 lob wrap 一次 global
# -*- coding: utf-8 -*- ‘‘‘ 使用語法糖@來裝飾函數,相當於“myfunc = deco(myfunc)” 但發現deco函數只在第一次被調用,且myfunc函數在第一次後又被多調用了一次 ‘‘‘ def deco(func): print("before myfunc() called.") func() print("after myfunc() called.") return func bool=0 @deco def myfunc(): global bool bool=bool+1 if not bool==2: print("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") bool=1 myfunc() myfunc() #用緩存避免重復運算 from functools import wraps def memo(f): cache = {} @wraps(f) #f函數不會被下面的閉包函數所影響 def wrap(arg): if arg not in cache: cache[arg] = f(arg) return cache return wrap @memo def fib(i): return i*2 print fib(3) print fib(5) print fib(3)
python函數裝飾器的使用