'''被裝飾的函式帶引數兩句口訣理解閉包與裝飾器
1.閉包:至少兩層樓,樓下變數管上樓,return上樓不動手
2.裝飾器:客人空手來,還得請上樓,幹啥都同意,有參給上樓
'''def secondfloor(func):
def thirdfloor():
print('源函式開始執行了')
func()
print('源函式執行完了')
return thirdfloor
def orign():
print('我是源函式')
sf = secondfloor(orign)
sf()
'python中的語法糖'
@secondfloor
def orign():
print('我是源函式')
orign()
# 這兩種呼叫方法結果是一樣的
def secondfloor(func):def thirdfloor(arg):
print('源函式開始執行了')
func(arg)
print('源函式執行完了')
return thirdfloor
@secondfloor
def orign(info):
print(info)
info = '你好啊'
orign(info)
被裝飾的函式帶引數二:
import timedef calculate_time(f):
def inner(*args,**kwargs):
start_time = time.time()
ret = f(*args,**kwargs)
end_time = time.time()
print(end_time - start_time)
return ret
return inner
@calculate_time
def add(m,n):
time.sleep(2.2)
return m+n
f = add(5,7)
print(f)
python閉包與裝飾器
首先閉包函式我的理解是,乙個函式內可以巢狀定義乙個函式,並將巢狀定義的函式返回 如果不返回執行完函式物件也就銷毀了 巢狀函式可以接收外部函式的引數,不同引數就可以變更巢狀函式的功能,返回不同功能的巢狀函式物件。以下是閉包函式簡單示例,如果inner函式不接收outer的引數x也就沒有意義了,一定要返...
Python閉包與裝飾器
一.閉包 如果乙個內嵌函式中引用了外部函式中的變數 非全域性變數 那麼該內嵌函式稱之為閉包 也就是將組成函式的語句和這些語句的執行環境打包在一起時,得到的物件 閉包滿足的三個條件 1.必須是內嵌函式 2.外層函式返回值是內嵌函式 3.內嵌函式引用外層函式變數 def funx x def funy ...
Python 閉包與裝飾器
在函式內部再定義乙個函式,並且內部這個函式用到了外邊函式的變數,那麼將內部函式以及用到的一些變數稱之為閉包。兩個函式巢狀,外層函式返回內層函式的引用,外層函式必須傳引數 外層函式不傳參相當於只定義內層函式,沒有什麼用。注意點 由於閉包引用了外部函式的區域性變數,則外部函式的區域性變數沒有及時釋放,消...