亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python 裝飾器代碼解析

 更新時(shí)間:2021年11月02日 16:03:58   作者:TORTOISR  
裝飾器(Decorators)是 Python 的一個(gè)重要部分。簡(jiǎn)單地說(shuō):他們是修改其他函數(shù)的功能的函數(shù)。他們有助于讓我們的代碼更簡(jiǎn)短,也更Pythonic(Python范兒)。大多數(shù)初學(xué)者不知道在哪兒使用它們,所以我將要分享幾個(gè)示例

前言:

以往看到我博客的小伙伴可能都知道,我的前言一般都是吐槽和講廢話(huà)環(huán)節(jié),哈哈哈哈。今天難得休息,最近可真是太忙了,博主已經(jīng)連續(xù)一年都在996了,所以最近沒(méi)怎么學(xué)習(xí)新東西,只能回顧以往的舊知識(shí)了,上周一起工作的小伙伴扛不住996離職了,我們?nèi)说男F(tuán)隊(duì)也正式解散了,哎。原本想著找時(shí)間好好整理一個(gè)關(guān)于關(guān)于接口自動(dòng)化測(cè)試或ceph相關(guān)的東西。但由于篇幅過(guò)長(zhǎng)這里目前可能不會(huì)著手寫(xiě)這方面東西。其實(shí)啊寫(xiě)是很簡(jiǎn)單的,主要例子難找。哈哈哈哈。
好了回歸正題吧??催^(guò)我以往博客的小伙伴肯定見(jiàn)我用過(guò)@parameterized.expand()用作參數(shù)化的裝飾器。這屬于系統(tǒng)定義裝飾器,當(dāng)然我們自己也可以自定義裝飾器已適合我們?nèi)粘5拈_(kāi)發(fā)需求。
**什么是裝飾器:**裝飾器的本質(zhì)就是一個(gè)函數(shù),作用是在不改變?cè)创a的情況下,給函數(shù)增加額外的功能;裝飾器的使用通過(guò)@語(yǔ)法糖進(jìn)行調(diào)用。

普通裝飾器:

直接上代碼吧。

def demo(func_test):
    def wrapper():
        print('定義的第一個(gè)裝飾器')
        func_test()
        print('裝飾器結(jié)束')
    return wrapper    #這里注意不要加括號(hào)


@demo
def func_test():
    print('小白小白?。。?!')

在這里插入圖片描述

直接使用自定義裝飾器強(qiáng)化的原方法。
帶有參數(shù)的裝飾器:

def demo(func_test):
    def wrapper(name):
        print('定義的第一個(gè)裝飾器')
        func_test(name)
        print('哦,你就是%s啊'%name)
        print('裝飾器結(jié)束')
    return wrapper


@demo
def func_test(name):
    print('大家好我叫%s'%name)

在這里插入圖片描述

是不是有點(diǎn)感覺(jué)了啊。
接下來(lái)就是不帶自定義參數(shù)的裝飾器

def demo(func_test):
    def wrapper(*name,**kwargs):
        print('定義的第一個(gè)裝飾器')
        func_test(*name,**kwargs)
        print('哦,你就是%s啊'%name[0])
        print('你今年%s歲啊'%name[1])
        print('裝飾器結(jié)束')
    return wrapper


@demo
def func_test(name,age):
    print('大家好我叫%s'%name)
    print('今年{}'.format(age))

在這里插入圖片描述

是不是很簡(jiǎn)答啊。哈哈哈哈
多個(gè)裝飾一起使用。

def deco01(func):
    def wrapper(*args,**kwargs):
        print('第一層的裝飾器')
        func(*args,**kwargs)
        print('第一層裝飾器結(jié)束')
    return wrapper


def deco02(func):
    def wrapper(*args,**kwargs):
        print('這是第二層裝飾器')
        print('第二層裝飾器結(jié)束')
        func(*args, **kwargs)
    return wrapper


@deco02
@deco01
def func(a,b,c,name):
    print('hello ,here is a func')
    print("result is %d" %(a+b+c))
    print('name:{}'.format(name))

在這里插入圖片描述

看看執(zhí)行順序可以看出裝飾器是從上往下執(zhí)行的。
類(lèi)裝飾器:
在使用裝飾器時(shí)我們總不能在一個(gè)文件里寫(xiě)的都是裝飾器和各個(gè)方法吧,總是要分開(kāi)的。這里就要是講一個(gè)類(lèi)裝飾器。
這里呢,我大概了寫(xiě)了一個(gè)讀取文件裝飾器的例子。

class Mydecorator():
    def __init__(self,func):
    # 定義為私有屬性
        self.func = func
    # 實(shí)現(xiàn)__call__方法,讓對(duì)象變成可以調(diào)用的對(duì)象,可調(diào)用的對(duì)象可以想函數(shù)那樣使用
    def __call__(self, *args, **kwargs):   
        print('測(cè)試類(lèi)裝飾器')
        self.func(*args)
        catalogue = args[0]
        suffix = catalogue.split('.')[2]
        try:
            if suffix == 'json':
                with open(*args,'r',encoding='utf-8') as file_object:
                    contents = json.load(file_object)
                    print(contents)
            else:
                with open(*args,'r',encoding='utf-8') as file_object:
                    contents = file_object.read()
                    print(contents)
        except Exception as a:
            print('讀取文件出錯(cuò)拉:{}'.format(a))
@Mydecorator
def name(name):
    print('請(qǐng)輸入對(duì)應(yīng)文件路徑:%s'%name)

在這里插入圖片描述

是不是很好用啊。哈哈哈哈

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

相關(guān)文章

  • pygame實(shí)現(xiàn)鍵盤(pán)的連續(xù)監(jiān)控

    pygame實(shí)現(xiàn)鍵盤(pán)的連續(xù)監(jiān)控

    這篇文章主要為大家詳細(xì)介紹了pygame實(shí)現(xiàn)鍵盤(pán)的連續(xù)監(jiān)控,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Python學(xué)習(xí)思維導(dǎo)圖(必看篇)

    Python學(xué)習(xí)思維導(dǎo)圖(必看篇)

    下面小編就為大家?guī)?lái)一篇Python學(xué)習(xí)思維導(dǎo)圖(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • Python pandas自定義函數(shù)的使用方法示例

    Python pandas自定義函數(shù)的使用方法示例

    這篇文章主要介紹了Python pandas自定義函數(shù)的使用方法,結(jié)合實(shí)例形式分析了pandas模塊相關(guān)自定義函數(shù)數(shù)值運(yùn)算操作技巧,需要的朋友可以參考下
    2019-11-11
  • Python?dbm庫(kù)利用鍵值對(duì)存儲(chǔ)數(shù)據(jù)

    Python?dbm庫(kù)利用鍵值對(duì)存儲(chǔ)數(shù)據(jù)

    Python中的dbm模塊提供了一種輕量級(jí)的數(shù)據(jù)庫(kù)管理工具,允許開(kāi)發(fā)者使用鍵值對(duì)的形式存儲(chǔ)和檢索數(shù)據(jù),這篇文章將深入介紹dbm庫(kù)的使用,探討其基礎(chǔ)功能、高級(jí)特性以及實(shí)際應(yīng)用場(chǎng)景
    2023-12-12
  • Python中字符串格式化的方法詳解

    Python中字符串格式化的方法詳解

    眾所周知,我們可以使用 print() 方法來(lái)輸出一個(gè)固定內(nèi)容的字符串,就像是 print("Hello, world!") 一樣,但是,在現(xiàn)實(shí)中,我們很多時(shí)候是需要輸出一些內(nèi)容不斷變化,或者內(nèi)容動(dòng)態(tài)生成的字符串,本文將介紹如何按照需要,在Python中格式化一個(gè)字符串
    2023-10-10
  • Python3 安裝PyQt5及exe打包圖文教程

    Python3 安裝PyQt5及exe打包圖文教程

    今天小編就為大家分享一篇Python3 安裝PyQt5及exe打包圖文教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python類(lèi)的繼承用法示例

    Python類(lèi)的繼承用法示例

    這篇文章主要介紹了Python類(lèi)的繼承用法,結(jié)合實(shí)例形式分析了Python類(lèi)的定義、繼承等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • 快速進(jìn)修Python指南之異常捕獲

    快速進(jìn)修Python指南之異常捕獲

    這篇文章主要為大家介紹了Java開(kāi)發(fā)者快速進(jìn)修Python指南之異常捕獲,?有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • pycham查看程序執(zhí)行的時(shí)間方法

    pycham查看程序執(zhí)行的時(shí)間方法

    今天小編就為大家分享一篇pycham查看程序執(zhí)行的時(shí)間方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • 基于Python把網(wǎng)站域名解析成ip地址

    基于Python把網(wǎng)站域名解析成ip地址

    這篇文章主要介紹了基于Python把網(wǎng)站域名解析成ip地址,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05

最新評(píng)論