最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python裝飾器的兩種使用心得

 更新時(shí)間:2021年09月30日 17:22:46   作者:糖烤栗子&  
裝飾器(Decorators)是 Python 的一個(gè)重要部分。簡單地說:他們是修改其他函數(shù)的功能的函數(shù)。他們有助于讓我們的代碼更簡短,也更Pythonic(Python范兒),今天通過本文給大家分享Python裝飾器使用小結(jié),感興趣的朋友一起看看吧

裝飾器的基礎(chǔ)使用(裝飾帶參函數(shù))

def decorator(func):
    def inner(info):
        print('inner')
        func(info)
    return inner

@decorator
def show_info(info):
    print(info)

show_info('hello')

防止裝飾器改變裝飾函數(shù)名稱

裝飾器在裝飾函數(shù)的時(shí)候由于返回的是inner的函數(shù)地址,所以函數(shù)的名稱也會(huì)改變 show_info.__name__會(huì)變成inner,防止這種現(xiàn)象可以使用functools

import functools

def decorator(func):
	@functools.wraps(func)
    def inner(info):
        print('inner')
        func(info)
    return inner

@decorator
def show_info(info):
    print(info)

show_info('hello')

這樣寫就不會(huì)改變被裝飾函數(shù)的名稱

裝飾器動(dòng)態(tài)注冊函數(shù)

此方法在Flask框架的app.Route()的源碼中體現(xiàn)

class 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的函數(shù)地址
@commands.regist_cmd('s1')
def show_h():
    print('show_h')

# 使得s2的值指向show_e的函數(shù)地址
@commands.regist_cmd('s2')
def show_e():
    print('show_e')

func = commands.cmd['s1']
func()

個(gè)人心得

在閱讀裝飾器代碼時(shí)可以使用加(func_name)的方式
以為例

@commands.regist_cmd('s2')
def show_e():
    print('show_e')

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

到此這篇關(guān)于Python裝飾器的兩種使用的文章就介紹到這了,更多相關(guān)Python裝飾器使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

苏尼特右旗| 庆安县| 孝昌县| 沧州市| 漳州市| 新龙县| 喜德县| 洛南县| 福海县| 乌兰县| 且末县| 巧家县| 宣威市| 仁怀市| 田阳县| 黄山市| 呼伦贝尔市| 奎屯市| 钦州市| 通榆县| 易门县| 辽阳市| 察雅县| 贵溪市| 高邑县| 和平县| 滦南县| 东平县| 观塘区| 鹤壁市| 台南市| 新野县| 甘谷县| 上杭县| 个旧市| 黔南| 惠安县| 祁连县| 新野县| 东辽县| 宣汉县|