内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

由淺入深,走進Python裝飾器-----第二篇:進階--函

上一篇:由淺入深,走進Python裝飾器-----第一篇:基礎(chǔ)

目前成都創(chuàng)新互聯(lián)已為上千的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、義安網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。



裝飾器的使用種類:

# 第一種
@函數(shù)
   被裝飾函數(shù)

# 第二種
@函數(shù)
    被裝飾類

# 第三種
@類
    被裝飾類

# 第四種
@函數(shù)
   被裝飾函數(shù)


本篇介紹第一種

@函數(shù)
   被裝飾函數(shù)

1.1 對帶參數(shù)的原函數(shù)進行修飾

# 默認將old函數(shù)的參數(shù)傳給outer里面的第一層函數(shù)
def outer(f):
    def inner(var):
        print("1 我是outer函數(shù),接收外部傳進來的old :",f)
        print("1 我是outer函數(shù),接收外部傳進來的old的參數(shù) :",var)
        f(var)
        print("3 我是outer函數(shù),我在old函數(shù)后顯示")
    return inner
    def inner2(var):
        pass
@outer                                     #old = outer(old)
def old(var):
    print("2 我是old函數(shù)","參數(shù): ",var)

var = '音樂'                                                
old(var)

>>>1 我是outer函數(shù),接收外部傳進來的old :       <function old at 0x00000000024DAA60>
>>>1 我是outer函數(shù),接收外部傳進來的old的參數(shù) : 音樂
>>>2 我是old函數(shù), 參數(shù):音樂
>>>3 我是outer函數(shù),我在old函數(shù)后顯示

1.2 對多參數(shù)的原函數(shù)進行修飾

def outer(f):
    def inner(a, b,*args,d,**kwargs):
        tmp = d                                            #通過變量接收命名關(guān)鍵字參數(shù)傳進來的參數(shù),然后再傳遞給內(nèi)部調(diào)用的函數(shù)                          
        print("1 我是outer函數(shù),接收外部傳進來的old :",f)
        print("1 我是outer函數(shù),接收外部傳進來的old的參數(shù) :\
            普通參數(shù)a={}, 默認參數(shù)b={}, 多余的普通參數(shù):{}和{}".format(a,b,args[0],args[1]))
        print("1 我是outer函數(shù),接收外部傳進來的old的參數(shù) :\
            命令關(guān)鍵字參數(shù)d:{}, 多余的關(guān)鍵字參數(shù):{}和{}".format(d,kwargs["key1"],kwargs["key2"]))
        f(a,b, *args,d = tmp,**kwargs)
        print("3 我是outer函數(shù),我在old函數(shù)后顯示")
    return inner

@outer                                     #old = outer(old)
def old(a, b=2, *args,d,**kwargs):         #五種參數(shù)
    print("2 我是old函數(shù)",
        "普通參數(shù)a={0}, 默認參數(shù)b={1}, 多余的普通參數(shù):{2}和{3},\
        命令關(guān)鍵字參數(shù)d:{4}, 多余的關(guān)鍵字參數(shù):{5}和{6}"\
        .format(a,b,args[0],args[1],d,kwargs["key1"],kwargs["key2"]))

dict1 = {"key1":"value1","key2":"value2"}
old(1,22,'args1','args2',d=4,**dict1)

>>> 1 我是outer函數(shù),接收外部傳進來的old :        <function old at 0x00000000024AAAE8>
>>> 1 我是outer函數(shù),接收外部傳進來的old的參數(shù) :  普通參數(shù)a=1, 默認參數(shù)b=22, 多余的普通參數(shù):args1和args2
>>> 1 我是outer函數(shù),接收外部傳進來的old的參數(shù) :  命名關(guān)鍵字參數(shù)d:4, 多余的關(guān)鍵字參數(shù):value1和value2
>>> 2 我是old函數(shù) 普通參數(shù)a=1, 默認參數(shù)b=22, 多余的普通參數(shù):args1和args2,命名關(guān)鍵字參數(shù)d:4, 多余的關(guān)鍵字參數(shù):value1和value2
>>> 3 我是outer函數(shù),我在old函數(shù)后顯示

1.3 對多參數(shù)的原函數(shù)進行嵌套修飾

def outer(f):
    def inner(a, b,*args,d,**kwargs):
        tmp = d                                            #通過變量接收命名關(guān)鍵字參數(shù)傳進來的參數(shù),然后再傳遞給內(nèi)部調(diào)用的函數(shù)                          
        print("1 我是outer函數(shù),接收外部傳進來的old :",f)
        print("1 我是outer函數(shù),接收外部傳進來的old的參數(shù) :\
            普通參數(shù)a={}, 默認參數(shù)b={}, 多余的普通參數(shù):{}和{}".format(a,b,args[0],args[1]))
        print("1 我是outer函數(shù),接收外部傳進來的old的參數(shù) :\
            命令關(guān)鍵字參數(shù)d:{}, 多余的關(guān)鍵字參數(shù):{}和{}".format(d,kwargs["key1"],kwargs["key2"]))
        f(a,b, *args,d = tmp,**kwargs)
        print("3 我是outer函數(shù),我在old函數(shù)后顯示")
    return inner

@outer                         #old = outer(outer(old))
@outer                         #old = outer(old)
def old(a, b=2, *args,d,**kwargs):         #五種參數(shù)
    print("2 我是old函數(shù)",
        "普通參數(shù)a={0}, 默認參數(shù)b={1}, 多余的普通參數(shù):{2}和{3},\
        命令關(guān)鍵字參數(shù)d:{4}, 多余的關(guān)鍵字參數(shù):{5}和{6}"\
        .format(a,b,args[0],args[1],d,kwargs["key1"],kwargs["key2"]))

dict1 = {"key1":"value1","key2":"value2"}
old(1,22,'args1','args2',d=4,**dict1)

>>> 1 我是outer函數(shù),接收外部傳進來的old :         <function outer.<locals>.inner at 0x00000000024FAAE8>
>>> 1 我是outer函數(shù),接收外部傳進來的old的參數(shù) :   普通參數(shù)a=1,  默認參數(shù)b=22,  多余的普通參數(shù):args1和args2
>>> 1 我是outer函數(shù),接收外部傳進來的old的參數(shù) :   命令關(guān)鍵字參數(shù)d:4,  多余的關(guān)鍵字參數(shù):value1和value2
>>> 1 我是outer函數(shù),接收外部傳進來的old :         <function old at 0x00000000024FAA60>
>>> 1 我是outer函數(shù),接收外部傳進來的old的參數(shù) :   普通參數(shù)a=1, 默認參數(shù)b=22, 多余的普通參數(shù):args1和args2
>>> 1 我是outer函數(shù),接收外部傳進來的old的參數(shù) :   命令關(guān)鍵字參數(shù)d:4, 多余的關(guān)鍵字參數(shù):value1和value2
>>> 2 我是old函數(shù) 普通參數(shù)a=1, 默認參數(shù)b=22, 多余的普通參數(shù):args1和args2,命令關(guān)鍵字參數(shù)d:4, 多余的關(guān)鍵字參數(shù):value1和value2
>>> 3 我是outer函數(shù),我在old函數(shù)后顯示
>>> 3 我是outer函數(shù),我在old函數(shù)后顯示

1.4 用帶參數(shù)的裝飾器函數(shù) 對 無參數(shù)原函數(shù) 進行修飾

def kuozhan(can_shu):
    def outer(f):
        tmp = can_shu
        def inner1():
            print("1 我是outer函數(shù)里的inner1,接收外部傳進來的old :",f)
            f()
            print("3 我是outer函數(shù)里的inner1,我在old函數(shù)后顯示")

        def inner2():
            print("1 我是outer函數(shù)里的inner2,接收外部傳進來的old :",f)
            f()
            print("3 我是outer函數(shù)里的inner2,我在old函數(shù)后顯示")
        if tmp == 1:
            return inner1
        else:
            return inner2

@kuozhan(2)                          # old = kuozhan(2)(old)    ==>      old = outer(old)
def old():
    print("2 我是old函數(shù)")

old()

>>> 1 我是outer函數(shù)里的inner2,接收外部傳進來的old : <function old at 0x0000000001E8ABF8>
>>> 2 我是old函數(shù)
>>> 3 我是outer函數(shù)里的inner2,我在old函數(shù)后顯示

1.5用帶參數(shù)的裝飾器函數(shù) 對 有參數(shù)原函數(shù) 進行修飾

def kuozhan(can_shu):
    def outer(f):
        tmp = can_shu
        def inner1(var):
            print("1 我是outer函數(shù)里的inner1,接收外部傳進來的old :",f)
            print("1  我是outer函數(shù)里的inner1,接收外部傳進來的old的參數(shù) :",var)
            f(var)
            print("3 我是outer函數(shù)里的inner1,我在old函數(shù)后顯示")

        def inner2(var):
            print("1 我是outer函數(shù)里的inner2,接收外部傳進來的old :",f)
            print("1  我是outer函數(shù)里的inner2,接收外部傳進來的old的參數(shù) :",var)
            f(var)
            print("3 我是outer函數(shù)里的inner2,我在old函數(shù)后顯示")
        if tmp == 1:
            return inner1
        else:
            return inner2
    return outer

@kuozhan(2)                         # old = kuozhan(2)(old)    ==>      old = outer(old)
def old(var):
    print("2 我是old函數(shù),","我的參數(shù)是: ",var)
var = "音樂"                                              
old(var)

>>> 1 我是outer函數(shù)里的inner2,接收外部傳進來的old :        <function old at 0x00000000021CABF8>
>>> 1 我是outer函數(shù)里的inner2,接收外部傳進來的old的參數(shù) :  音樂
>>> 2 我是old函數(shù),      我的參數(shù)是:  音樂
>>> 3 我是outer函數(shù)里的inner2,我在old函數(shù)后顯示

1.6 對類內(nèi)部的方法進行修飾

# 默認將old函數(shù)的參數(shù)傳給outer里面的第一層函數(shù)
def outer(f):
    def inner(var):
        print("1 我是outer函數(shù),接收外部傳進來的old :",f)
        print("1 我是outer函數(shù),接收外部傳進來的old的參數(shù) :",var)
        f(var)
        print("3 我是outer函數(shù),我在old函數(shù)后顯示")
    return inner
    def inner2(var):
        pass
class MyClass():
    @outer                                     #old = outer(old)
    def old(var):
        print("2 我是old函數(shù)","參數(shù): ",var)

var = '音樂'                                                
MyClass.old(var)

>>>1 我是outer函數(shù),接收外部傳進來的old :       <function old at 0x00000000024DAA60>
>>>1 我是outer函數(shù),接收外部傳進來的old的參數(shù) : 音樂
>>>2 我是old函數(shù), 參數(shù):音樂
>>>3 我是outer函數(shù),我在old函數(shù)后顯示

當前題目:由淺入深,走進Python裝飾器-----第二篇:進階--函
分享鏈接:http://www.rwnh.cn/article46/jscehg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、營銷型網(wǎng)站建設(shè)服務(wù)器托管、軟件開發(fā)全網(wǎng)營銷推廣、用戶體驗

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
桐柏县| 北安市| 高青县| 河西区| 涞水县| 双江| 德惠市| 康马县| 大冶市| 南昌县| 探索| 宜丰县| 扶余县| 封开县| 定州市| 屯留县| 岐山县| 庆安县| 惠安县| 甘肃省| 绥芬河市| 余干县| 雷山县| 阿图什市| 霍山县| 汾西县| 巴东县| 洛阳市| 中牟县| 陈巴尔虎旗| 新河县| 襄樊市| 玉门市| 安西县| 宁国市| 潞城市| 长顺县| 邛崃市| 西城区| 赞皇县| 聂拉木县|