Python裝飾器的兩種使用心得

2022-09-27 08:06:12 字數 1366 閱讀 7084

def decorator(func):

def inner(info):

print('inner')

func(info)

return inner

@decorator

def show_info(info):

print(info)

show_info('hello')

裝飾器在裝飾函式的時候由於返回的是inner的函式位址,所以函式的名稱也會改變 show_info.__name__會變成inner,防止這種現象可以使用functools

import functools

def decorator(func):

@functools.wraps(程式設計客棧func)

def inner(info):

print('inner')

www.cppcns.com func(info)

return inner

@decorator

def show_info(info):

print(info)

show_info('hello')

這樣寫就不會改變被裝飾函式的名稱

此方法在flask框架的app.route()的原始碼中體現

cl程式設計客棧ass commands(object):

def __init__(self):

self.cmd = {}

def regist_cmd(self, name: str) -> none:

def decorator(func):

self.cmd[name] = func

print('func:',func)

return func

return decorator

commands = commands()

# 使得s1的值指向show_h的函式位址

@commands.regist_cmd('s1')

def show_h():

print('show_h')

# 使得s2的值指向show_e的函式位址

@commands.regist_cmd('s2')

def show_e():

print('show_e')

func = commands.cmd['s1']

func()

在閱讀裝飾器**時可以使用加(func_name)的方式

以為例@commands.regist_cmd('s2')

def show_e():

print('show_e'www.cppcns.com)

即 show_e = commands.regist_cmd('s2')(show_e)

Python 兩種裝飾器

目錄 帶引數的裝飾器 函式 類裝飾器 裝飾器 decorators 是 python 的乙個重要部分。簡單地說 他們是修改其他函式的功能的函式。他們有助於讓我們的 更簡短,也更pythonic python範兒 來想想這個問題,難道 wraps不也是個裝飾器嗎?但是,它接收乙個引數,就像任何普通的函...

python裝飾器兩種方式

1.普通裝飾器 def decorate fun 普通裝飾器 param fun return def inner args,kwargs print 呼叫裝飾器之前 fun args,kwargs print 呼叫裝飾器之後 return inner decorate method decorat...

python帶引數裝飾器的兩種寫法

前言 最近在實現乙個裝飾器的過程中發現了乙個很有意思的地方,在部落格裡面分享出來 不同的寫法 三層函式巢狀,實現了可傳引數的乙個裝飾器。import logging import functools deflogger msg none 日誌 defdector func functools.wra...