python學習第一天---裝飾器
阿新 • • 發佈:2018-11-06
python函式(python3.7)
1.函式作用域LEGB
L > E > G > B
L:local -函式內部作用域
E:enclosing -函式內部與內嵌函式之間
G:global -全域性變數
B:build-in -內建作用域
1 passline = 60 # 全域性變數 2 3 def func(val): 4 if val >= passline: 5 print('pass') 6 else: 7 print('failed') 8 func(86)
2.閉包理解與使用
函式實質與屬性
1.函式是一個物件
2.函式執行完成之後內部變量回收
3.函式屬性
4.函式返回值
passline = 60 def func(val): if val >= passline: print('pass') else: print('failed') def in_func(): print(val) return in_func f = func(68) f()
def set_passline(passline):def cmpp(val): if val>=passline:; print('pass') else: print('failed')
return cmpp
3.裝飾器
裝飾器形成的過程
裝飾器的作用
不想修改函式的呼叫方式,但是還想在原來的函式前後新增功能
timer就是一個裝飾器函式,只有對一個函式有一些裝飾作用
@timer 魔法糖(呼叫裝飾器的方式)
原則:開放封閉原則
開放:對擴充套件時開放的
封閉:對修改是封閉的
裝飾器的固定模式
def wrapper(f): #裝飾器函式,f是被裝飾的函式 def inner(*args,**kwargs):
“”“在被裝飾函式之前要做的事”“” ret = f(*args,**kwargs) #被裝飾的函式
“”“在被裝飾函式之後要做的事”“” return ret return inner @wrapper # @裝飾器函式 func = wrapper(func)
def func(*args,**kwargs): #被裝飾函式
time.sleep(0.01)
print("hello world")
return "新年好"
func() #實際上執行的inner()