欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一起來看看python的裝飾器代碼

 更新時間:2022年03月24日 16:03:31   作者:低調(diào)說  
這篇文章主要為大家詳細介紹了python裝飾器代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

裝飾器通用模型

def wrapper(fn):
    def inner(*args, **kwargs):
        ret = fn(*args, **kwargs)
        return ret
    return inner

裝飾器幾個關(guān)鍵點

"""
1.函數(shù)可以當(dāng)參數(shù)傳遞
2.函數(shù)可以作為返回值進行返回
3.函數(shù)名稱可以當(dāng)成變量一樣進行賦值操作
裝飾器本質(zhì)上是個閉包
在不改變原有函數(shù)調(diào)用的情況下,給函數(shù)增加新的功能
"""

舉個例子

#!/usr/bin/python
def admin(game):
    def inner(*args, **kwargs):  # inner添加了參數(shù),args 一定是個元組 kwargs 一定是字典
        print('打開Wg')
        result = game(*args, **kwargs)  # * ** 表示把args元組和kwargs打散成位置參數(shù),關(guān)鍵字參數(shù)傳遞進去
        print('關(guān)閉Wg')
        return result
    return inner
@admin
def play_dnf(username, password):
    print(f'開始玩DNF,賬號:{username},密碼:{password}')
    print('刀斬肉身,心斬靈魂')
    return '掉落:戮蠱的哀鳴炮'
@admin
def play_wow(race, occupation, server_name, camp):
    print(f'開始玩魔獸世界,種族:{race},職業(yè):{occupation},服務(wù)器:{server_name},陣營:{camp}')
    print('為了辛多雷的榮耀')
    return '掉落:灰燼使者'
if __name__ == '__main__':
    ret1 = play_dnf('大馬猴', '888888')
    print(ret1)
    ret2 = play_wow('血精靈', '圣騎士', '回音山', '部落')
    print(ret2)

這代碼還是很好懂的,我就不解釋了,然后是執(zhí)行結(jié)果

python demo.py
打開Wg
開始玩DNF,賬號:大馬猴,密碼:888888
刀斬肉身,心斬靈魂
關(guān)閉Wg
掉落:戮蠱的哀鳴炮
打開Wg
開始玩魔獸世界,種族:血精靈,職業(yè):圣騎士,服務(wù)器:回音山,陣營:部落
為了辛多雷的榮耀
關(guān)閉Wg
掉落:灰燼使者
Process finished with exit code 0

一個函數(shù)被多個裝飾器裝飾,又將如何執(zhí)行呢?

#!/usr/bin/python
def wrapper1(fn):
    def inner(*args, **kwargs):
        print('這是w1進入')
        ret = fn(*args, **kwargs)
        print('這是w1出去')
        return ret
    return inner
def wrapper2(fn):
    def inner(*args, **kwargs):
        print('這是w2進入')
        ret = fn(*args, **kwargs)
        print('這是w2出去')
        return ret
    return inner
@wrapper1
@wrapper2
def target():
    print('我是目標(biāo)')
if __name__ == '__main__':
    target()

直接給出執(zhí)行順序

一個函數(shù)被多個裝飾器裝飾的執(zhí)行順序

# w1 w2 target w2 w1

帶參數(shù)的裝飾器

裝飾器的語法允許我們在調(diào)用時,提供其它參數(shù),比如@decorator(a)。這樣,就為裝飾器的編寫和使用提供了更大的靈活性。
(在上面又套了一層函數(shù))

比如,我們可以在裝飾器中指定日志的等級,因為不同業(yè)務(wù)函數(shù)可能需要的日志級別是不一樣的。

def use_logging(level):
    def decorator(func):
        def wrapper(*args, **kwargs):
            if level == "warn":
                logging.warn("%s is running" % func.__name__)
            elif level == "info":
                logging.info("%s is running" % func.__name__)
            return func(*args)
        return wrapper
    return decorator
@use_logging(level="warn")
def foo(name='foo'):
    print("i am %s" % name)
foo()

類裝飾器

沒錯,裝飾器不僅可以是函數(shù),還可以是類,相比函數(shù)裝飾器,類裝飾器具有靈活度大、高內(nèi)聚、封裝性等優(yōu)點。使用類裝飾器主要依靠類的__call__方法,當(dāng)使用 @ 形式將裝飾器附加到函數(shù)上時,就會調(diào)用此方法。

class Foo(object):
    def __init__(self, func):
        self._func = func
    def __call__(self):
        print ('class decorator runing')
        self._func()
        print ('class decorator ending')
@Foo
def bar():
    print ('bar')
bar()

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!    

相關(guān)文章

  • 一文掌握Python爬蟲XPath語法

    一文掌握Python爬蟲XPath語法

    這篇文章主要介紹了一文掌握Python爬蟲XPath語法,xpath是一門在XML和HTML文檔中查找信息的語言,可用來在XML和HTML文檔中對元素和屬性進行遍歷,XPath 通過使用路徑表達式來選取 XML 文檔中的節(jié)點或者節(jié)點集。下面會更學(xué)習(xí)的介紹,需要的朋友可以參考一下
    2021-11-11
  • Python用來做Web開發(fā)的優(yōu)勢有哪些

    Python用來做Web開發(fā)的優(yōu)勢有哪些

    這篇文章主要介紹了Python用來做Web開發(fā)的優(yōu)勢有哪些,文中講解非常細致,幫助大家更好的理解和學(xué)習(xí)Python,感興趣的朋友可以了解下
    2020-08-08
  • python使用tkinter打造三維繪圖系統(tǒng)的示例代碼

    python使用tkinter打造三維繪圖系統(tǒng)的示例代碼

    Python?的?tkinter?模塊是一個常用的?GUI(圖形用戶界面)工具包,它能夠讓你創(chuàng)建窗口應(yīng)用程序,你可以使用它來構(gòu)建用戶友好的界面,包括按鈕、標(biāo)簽、文本框、列表框等各種控件,本文講給大家介紹如何使用tkinter打造三維繪圖系統(tǒng),需要的朋友可以參考下
    2023-08-08
  • python對html代碼進行escape編碼的方法

    python對html代碼進行escape編碼的方法

    這篇文章主要介紹了python對html代碼進行escape編碼的方法,涉及Python中escape方法的使用技巧,非常具有實用價值,需要的朋友可以參考下
    2015-05-05
  • Python最基本的數(shù)據(jù)類型以及對元組的介紹

    Python最基本的數(shù)據(jù)類型以及對元組的介紹

    這篇文章主要介紹了Python最基本的數(shù)據(jù)類型以及對元組的介紹,來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • 在Python中關(guān)于中文編碼問題的處理建議

    在Python中關(guān)于中文編碼問題的處理建議

    這篇文章主要介紹了幾種在Python中關(guān)于中文編碼問題的處理方法,包括在使用Unicode編碼時碰到的異常等,需要的朋友可以參考下
    2015-04-04
  • Python實現(xiàn)文本特征提取的方法詳解

    Python實現(xiàn)文本特征提取的方法詳解

    這篇文章主要為大家詳細介紹了Python實現(xiàn)提取四種不同文本特征的方法,有字典文本特征提取、英文文本特征提取、中文文本特征提取和TF-IDF 文本特征提取,感興趣的可以了解一下
    2022-08-08
  • Python基于隨機采樣一至性實現(xiàn)擬合橢圓(優(yōu)化版)

    Python基于隨機采樣一至性實現(xiàn)擬合橢圓(優(yōu)化版)

    這篇文章主要對上一版的Python基于隨機采樣一至性實現(xiàn)擬合橢圓的優(yōu)化,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的可以了解一下
    2022-11-11
  • 淺談Django前端后端值傳遞問題

    淺談Django前端后端值傳遞問題

    這篇文章主要介紹了淺談Django前端后端值傳遞問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python基礎(chǔ)篇之初識Python必看攻略

    Python基礎(chǔ)篇之初識Python必看攻略

    下面小編就為大家?guī)硪黄狿ython基礎(chǔ)篇之初識Python必看攻略。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06

最新評論