python閉包與裝飾器

2022-07-07 01:30:22 字數 1156 閱讀 9885

'''

兩句口訣理解閉包與裝飾器

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 time

def 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 閉包與裝飾器

在函式內部再定義乙個函式,並且內部這個函式用到了外邊函式的變數,那麼將內部函式以及用到的一些變數稱之為閉包。兩個函式巢狀,外層函式返回內層函式的引用,外層函式必須傳引數 外層函式不傳參相當於只定義內層函式,沒有什麼用。注意點 由於閉包引用了外部函式的區域性變數,則外部函式的區域性變數沒有及時釋放,消...