python裝飾器原理和用法總結

2022-07-28 00:21:13 字數 1459 閱讀 7441

裝飾器本質也是乙個函式, 只不過這個函式需要遵循以下規則:

(*args, **kwargs):
以滿足所有函式需要

之後通過@語法糖即可裝飾到任意函式上

# 不帶引數的裝飾器

def pre_do_sth(func):

print("do sth before call one")

func(*args, **kwargs)

@pre_do_sth

def echo(msg):

print(msg)

echo("hello world")

do sth before call one

hello world

只需要寫乙個返回 裝飾器(入參只有乙個, 返回值是乙個函式)函式的函式

同樣也能利用@語法糖

# 帶引數的裝飾器

def pre_do_sth_2(msg):

def decorator(func):

print("do sth before call two, print:%s"%(msg))

func(*args, **kwargs)

return decorator

@pre_do_sth_2("foo")

def echo(msg):

print(msg)

echo("hello world")

實際上@後面並不是對pre_do_sth_2這個函式生效 而是對pre_do_sth_2的返回值生效

do sth before call two, print:foo

hello world

先宣告的裝飾器先執行, 即在最外層

# 不帶引數的裝飾器

def pre_do_sth(func):

print("do sth before call one")

func(*args, **kwargs)

# 帶引數的裝飾器

def pre_do_sth_2(msg):

def decorator(func):

print("do sth before call two, print:%s"%(msg))

func(*args, **kwargs)

return decorator

@pre_do_sth

@pre_do_sth_2("foo")

def echo(msg):

print(msg)

echo("hello world")

do sth before call one

do sth before call two, print:foo

hello world

python裝飾器原理 Python裝飾器原理

裝飾器 decorator 是物件導向設計模式的一種,這種模式的核心思想是在不改變原來核心業務邏輯 的情況下,對函式或類物件進行額外的修飾。python中的裝飾器由python直譯器直接支援,其定義形式如下 decorator def core service 要理解上述 的含義,我們從自定義函式裝...

python中裝飾器的原理及用法

要想理解python中裝飾器的原理首先要明白一下兩點 2 裝飾器的的作用等價於callfucn decfucn callfucn 這兩點在後期的分析中要牢牢的記住。以一段 為例 def decofun func def deco a,b print before callfunc called.fu...

Python裝飾器原理分析和案例

裝飾器部分 裝飾器是可呼叫的物件,其引數是另乙個函式 被裝飾的函式 裝飾器可能會處理被裝飾的函式,將它返回 或者將其替換成另乙個函式或者可呼叫的物件。decorate def target print running target 以上例子,通過裝飾器之後,實際執行的是如下方法 def target...