python基礎知識整理 裝飾器

2021-08-29 20:57:24 字數 1672 閱讀 8215

最簡裝飾器

def deco(func):

def wrap(*args, **kwargs):

return func(*args, **kwargs)

return wrap

​@deco

def foo(a, b):

return a ** b

原理

對比被裝飾前後的foo.__name__foo.__doc__

from functools import wraps

​def deco(func):

'''i am deco'''

@wraps(func) # 還原被裝飾器修改的原函式屬性

def wrap(*args, **kwargs):

'''i am wrap'''

return func(*args, **kwargs)

return wrap

簡單過程

fn = deco(func)

foo = fn

foo(*args, **kwargs)

多個裝飾器疊加呼叫的過程

@deco1

@deco2

@deco3

def foo(x, y):

return x ** y

​# 過程拆解 1

fn3 = deco3(foo)

fn2 = deco2(fn3)

fn1 = deco1(fn2)

foo = fn1

foo(3, 4)

​# 過程拆解 2

# 單行: deco1( deco2( deco3(foo) ) )(3, 2)

deco1(

deco2(

deco3(foo)

))(3, 4)

帶引數的裝飾器

def deco(n):

def wrap1(func):

def wrap2(*args, **kwargs):

return func(*args, **kwargs)

return wrap2

return wrap1

​# 呼叫過程

wrap1 = deco(n)

wrap2 = wrap1(foo)

foo = wrap2

foo()

​# 單行形式

check_result(30)(foo)(4, 8)

裝飾器類和call

class deco:

def __init__(self, func):

self.func = func

​ def __call__(self, *args, **kwargs):

return self.func(*args, **kwargs)

​@deco

def foo(x, y):

return x ** y

​# 過程拆解

fn = deco(foo)

foo = fn

foo(12, 34)

Python基礎知識之裝飾器decorator

本質是函式,裝飾其他函式 為其他函式新增附加功能。不能修改被裝飾的函式的源 不能修改被裝飾的函式的呼叫方式 高階函式 巢狀函式 裝飾器 1.函式即 變數 定義乙個函式就相當於定義乙個變數,即將函式體賦值給乙個變數名。python的記憶體 機制規定 當儲存在記憶體中的內容沒有對應的變數名指定時,則當記...

python基礎知識整理

一 資料型別 整型 int 浮點型 float 複數型 字串型 二 輸入輸出 nnum input 請輸入 print 輸出的是 nnum print d nnum 三 選擇結構 if elif else 四 運算子 會得到小數 整除 次方 五 列表 list 元組 tuple 字典 dict so...

python基礎知識整理2

可迭代物件 可 於迭代操作 for 迴圈 的物件。擁有 iter 法的物件 注意 iter 法的返回值是迭代器物件 迭代器任何由實現了 iter 法的類建立的物件都是可迭代對 象。任何由實現了 iter 和 next 法的類建立的物件 都是迭代器物件。迭代器是懶載入的 延遲載入的 使 for對迭代器...