python高階 裝飾器

2022-06-20 14:45:11 字數 1797 閱讀 1464

1.閉包

簡單理解:閉包就是多層函式的巢狀,外層函式的返回值是內層函式的引用。

def

out_func(n):

num = 100

def in_fucn(*args,**kwargs):

# nonlocal num

if n % 2 ==0: # 裡面沒有修改num的值,直接使用可以,如果變成 num += n 則會報錯,因此需要使用前加上nonlocal num

return n +num

# return num += n

else

:

return n-num

return

in_fucn

test = out_func(10)

ret =test()

print

(ret)#結果

110

閉包的作用就是,裝飾器

2.裝飾器

簡單的理解:就是不改變函式結構的情況下,給函式增加功能。

def

outter(func):

def inner(*args,**kwargs):

print("

今天星期五")

func(*args,**kwargs)

print("

下午我和,小紅去吃烤魚")

return

inner

def test(*args,**kwargs):

print("

今天天氣很不錯")

test =outter(test) # 標準寫法

test() # 普通的呼叫了test函式,但是給函式上下都多列印了一行數字。#結果

今天星期五

今天天氣很不錯

下午我和,小紅去吃烤魚

裝飾器實現檢測函式執行時間的功能

import

time

defoutter(func):

def inner(*args,**kwargs):

start_t =time.time()

func(*args,**kwargs)

end_t =time.time()

print("

函式test的執行時間為{}s

".format(end_t-start_t))

return

inner

def test(*args,**kwargs):

time.sleep(10)

test =outter(test)

test()#結果

函式test的執行時間為10.098577499389648s

優雅的寫法

import

time

defoutter(func):

def inner(*args,**kwargs):

start_t =time.time()

func(*args,**kwargs)

end_t =time.time()

print("

函式test的執行時間為{}s

".format(end_t-start_t))

return

inner

@outter

def test(*args,**kwargs):

time.sleep(10)

test()#結果

函式test的執行時間為10.000571966171265s

python高階裝飾器 Python裝飾器高階

對帶引數的函式進行裝飾 對帶引數的函式進行裝飾,內嵌包裝函式的形參和返回值與原函式相同,裝飾函式返回內嵌包裝函式物件 def deco func def deco a,b print before myfunc called.ret func a,b print after myfunc calle...

python高階 裝飾器

1.1 裝飾器 裝飾器的作用 在不改變原函式的情況下給函式增加功能 裝飾器由閉包和語法糖組成 1.2 閉包 閉包特點 外部函式巢狀內部函式 內部函式可以訪問並且儲存外部函式的變數 外部函式返回內部函式的引用 有以上三個特點的函式就稱為閉包 閉包的例子 def func1 a def func2 b ...

python高階 裝飾器

1.1 裝飾器 裝飾器的作用 在不改變原函式的情況下給函式增加功能 裝飾器由閉包和語法糖組成 1.2 閉包 閉包特點 外部函式巢狀內部函式 內部函式可以訪問並且儲存外部函式的變數 外部函式返回內部函式的引用 有以上三個特點的函式就稱為閉包 閉包的例子 def func1 a def func2 b ...