校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > python高級(jí)語(yǔ)法之閉包和裝飾器詳解

python高級(jí)語(yǔ)法之閉包和裝飾器詳解

熱門(mén)標(biāo)簽:唐山智能外呼系統(tǒng)一般多少錢(qián) 公司電話(huà)機(jī)器人 白銀外呼系統(tǒng) 激戰(zhàn)2地圖標(biāo)注 騰訊外呼線路 廣告地圖標(biāo)注app 海南400電話(huà)如何申請(qǐng) 哈爾濱ai外呼系統(tǒng)定制 陜西金融外呼系統(tǒng)

一、閉包

閉包的形成條件:

1.函數(shù)嵌套。

2.內(nèi)部函數(shù)使用了外部函數(shù)的變量或者參數(shù)。

3.外部函數(shù)返回了使用外 部變量的內(nèi)部函數(shù)。

二、一個(gè)簡(jiǎn)單的例子

def func_out(num1):
    def inner(num2):
        res = num1 + num2
        print(res)
    return inner
# a = func_out(10)(10)
a = func_out(10)
a(10)

閉包修改外部函數(shù)的變量:

在閉包內(nèi)修改外部函數(shù)的變量需要使用nonlocal關(guān)鍵字

def func_out():
    # 外部函數(shù)的變量
    num1 = 10
    def func_inner():
        # 在閉包內(nèi)修改外部函數(shù)的變量
        nonlocal num1
        num1 = 20
        res = num1 +20
        print(res)
    print("修改前的變量", num1)
    func_inner()
    print("修改后的變量", num1)
    return func_inner
new_func = func_out()
new_func()

三、裝飾器

3.1 簡(jiǎn)單裝飾器

裝飾器就是給已有函數(shù)增加額外功能的函數(shù),它本質(zhì)上就是一個(gè)閉包函數(shù),也就是說(shuō)也是一個(gè)函數(shù)嵌套。裝飾器的功能特點(diǎn):

1.不修改已有函數(shù)的源代碼

2.不修改已有函數(shù)的調(diào)用方式

3.給已有函數(shù)增加額外的功能

用戶(hù)在發(fā)表評(píng)論的時(shí)候需要驗(yàn)證用戶(hù)是否登錄,我們首先會(huì)想到去修改原來(lái)的函數(shù),在函數(shù)里面添加一些功能,但是在現(xiàn)在這分工合作的時(shí)代,這樣的修改很容易出現(xiàn)修改了祖?zhèn)鞯拇a后,函數(shù)出現(xiàn)問(wèn)題,也影響代碼的高效復(fù)用。為了能夠不重新修改原來(lái)的評(píng)論的代碼,實(shí)現(xiàn)高水平的代碼復(fù)用。

原本的函數(shù)及其調(diào)用:

def comment():
    print("執(zhí)行祖?zhèn)鞔a.....")
    print("發(fā)表評(píng)論")
# 調(diào)用評(píng)論功能
comment()

自己手寫(xiě)一個(gè)實(shí)現(xiàn)裝飾器功能的函數(shù)實(shí)現(xiàn)登錄驗(yàn)證:

def decorator(func):
    def inner():
        print('正在驗(yàn)證登錄者身份...\n驗(yàn)證成功')
        func()
    return inner


def comment():
    print("執(zhí)行祖?zhèn)鞔a.....")
    print("發(fā)表評(píng)論")
# 調(diào)用評(píng)論功能
comment = decorator(comment)
comment()

輸入結(jié)果:

正在驗(yàn)證登錄者身份…
驗(yàn)證成功
執(zhí)行祖?zhèn)鞔a…
發(fā)表評(píng)論

3.1.1 使用裝飾器的語(yǔ)法糖

裝飾器的語(yǔ)法糖寫(xiě)法:@裝飾器名稱(chēng)

如例子可以改寫(xiě)為:

def decorator(func):
    def inner():
        print('正在驗(yàn)證登錄者身份...\n驗(yàn)證成功')
        func()
    return inner

@decorator
def comment():
    print("執(zhí)行祖?zhèn)鞔a.....")
    print("發(fā)表評(píng)論")

# 調(diào)用函數(shù)
comment()

運(yùn)行結(jié)果:

正在驗(yàn)證登錄者身份…
驗(yàn)證成功
執(zhí)行祖?zhèn)鞔a…
發(fā)表評(píng)論

3.1.2 裝飾器的執(zhí)行時(shí)機(jī)

先說(shuō)結(jié)論:在使用裝飾器語(yǔ)法糖時(shí),會(huì)先將該裝飾器函數(shù)執(zhí)行一遍。

def decorator(func):
    # 測(cè)試裝飾器的執(zhí)行時(shí)機(jī)
    print('--remark1----')
    def inner():
        print('正在驗(yàn)證登錄者身份...\n驗(yàn)證成功')
        func()
    print('----remark2---')
    return inner

@decorator
def comment():
    print("執(zhí)行祖?zhèn)鞔a.....")
    print("發(fā)表評(píng)論")

輸出結(jié)果:

–remark1----
----remark2—

3.2 通用裝飾器

裝飾的函數(shù)可能有參數(shù)傳遞,或者有返回值,上面寫(xiě)的例子中,如果依然用上面的方法及逆行裝飾器的裝飾將會(huì)出現(xiàn)問(wèn)題,那是否有一個(gè)通用的裝飾器能夠裝飾任意函數(shù)呢?

3.2.1 裝飾帶有參數(shù)的函數(shù)

def logging(fn):
    def inner(num1,num2):
        print('執(zhí)行了一次計(jì)算')
        fn(num1,num2)
    return inner
# 使用裝飾器裝飾函數(shù)
@logging
def sum_num(a,b):
    result = a + b
    print(result)
    
sum_num(1,2)

3.2.2. 裝飾帶有返回值的函數(shù):

def logging(fn):
    def inner(num1,num2):
        print('執(zhí)行了一次計(jì)算')
        result = fn(num1,num2)
        return result
    
    return inner
# 使用裝飾器裝飾函數(shù)
@logging
def sum_num(a,b):
    result = a + b
    return result
    
print(sum_num(1,2))

3.2.3 實(shí)現(xiàn)通用裝飾器

*args: 用于接收元組參數(shù),可傳可不傳

**kwargs: 用于接收字典類(lèi)型參數(shù),可傳可不傳

def logging(fn):
    def inner(*args, **kwargs):
        result = fn(*args, **kwargs)
        return result
    return inner

@logging
def sum_num(a,b):
    result = a + b
    return result

3.3 多個(gè)裝飾器的使用

多個(gè)裝飾器的過(guò)程:由內(nèi)到外的裝飾過(guò)程,先執(zhí)行內(nèi)部裝飾器,再執(zhí)行外部裝飾器。

原理剖析:content = make_div(make_p(content))

分步拆解:content = make_p(content), 內(nèi)部裝飾器完成content=make_p.inner, content = make_div(make_p.inner)

def make_div(func):
    print("make_div裝飾器執(zhí)行了")
    def inner():
        # 在內(nèi)部函數(shù)對(duì)已有函數(shù)進(jìn)行裝飾
        result = "div>" + func() +"/div>"
        return result
    return inner

def make_p(func):
    print("make_p裝飾器執(zhí)行了")
    def inner():
        # 在內(nèi)部函數(shù)對(duì)已有函數(shù)進(jìn)行裝飾
        result = "p>" + func() +"/p>"
        return result
    return inner

@make_div
@make_p
def content():
    return "人生苦短,我用Python"

輸出:

make_p裝飾器執(zhí)行了
make_div裝飾器執(zhí)行了
div>p>人生苦短,我用Python/p>/div>

3.4 帶有參數(shù)的裝飾器

帶有參數(shù)的裝飾器時(shí)機(jī)上就是定義了一個(gè)函數(shù),讓函數(shù)接收參數(shù),再函數(shù)內(nèi)部返回該裝飾器。

如定義一個(gè)能夠判斷加減的裝飾器:

def return_decorator(flag):
    def decorator(func):
        def inner(a,b):
            if flag == '+':
                print("正在進(jìn)行加法運(yùn)算")
            elif flag == '-':
                print("正在進(jìn)行減法運(yùn)算")
            func(a,b)
        return inner
    return decorator
@return_decorator('+')
def add_num(a,b):
    print(a+b)

add_num(1,5)

3.5 類(lèi)裝飾器

使用類(lèi)裝飾已有函數(shù)。

class MyDecorator(object):
    def __init__(self,func):
        self.__func = func
    # 實(shí)現(xiàn)__call__方法,讓對(duì)象變成可調(diào)用的對(duì)象,
    # 可調(diào)用的對(duì)象能夠像函數(shù)一樣被使用。
    def __call__(self,*args,**kwargs):
        # 對(duì)已有參數(shù)進(jìn)行封裝
        print('--正在進(jìn)行裝飾-----')
        self.__func()
        
@MyDecorator
def show():
    print("hello")

# 指向MyDecorator類(lèi)創(chuàng)建實(shí)例對(duì)象--> show()==> 對(duì)象()
show()

輸出:

–正在進(jìn)行裝飾-----
hello

到此這篇關(guān)于python高級(jí)語(yǔ)法之閉包和裝飾器詳解的文章就介紹到這了,更多相關(guān)python閉包和裝飾器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python閉包和裝飾器你了解嗎
  • Python 中閉包與裝飾器案例詳解
  • Python必備基礎(chǔ)之閉包和裝飾器知識(shí)總結(jié)
  • Python 中的函數(shù)裝飾器和閉包詳解
  • python閉包的實(shí)例詳解

標(biāo)簽:上海 黑龍江 惠州 益陽(yáng) 黔西 常德 四川 鷹潭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python高級(jí)語(yǔ)法之閉包和裝飾器詳解》,本文關(guān)鍵詞  python,高級(jí),語(yǔ)法,之閉包,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python高級(jí)語(yǔ)法之閉包和裝飾器詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于python高級(jí)語(yǔ)法之閉包和裝飾器詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    亚洲丝袜自拍清纯另类| 在线观看精品一区| 国产欧美日韩另类一区| 激情久久久久久久久久久久久久久久| 日韩片之四级片| 国产精品一区二区在线观看网站| 国产日韩精品久久久| 成人免费看黄yyy456| 亚洲精品欧美专区| 91.麻豆视频| 国产激情偷乱视频一区二区三区| 国产日韩高清在线| 日本伦理一区二区| 日本最新不卡在线| 国产婷婷色一区二区三区| 97aⅴ精品视频一二三区| 亚洲大片在线观看| 久久久精品人体av艺术| 91视频在线观看| 午夜影院久久久| 久久久电影一区二区三区| 不卡的av网站| 日韩精品91亚洲二区在线观看 | 亚洲福利一二三区| 日韩欧美一区二区不卡| 成人av免费在线播放| 午夜一区二区三区在线观看| 精品国产一区久久| 色婷婷av一区二区三区gif| 美女视频黄 久久| 亚洲蜜桃精久久久久久久| 欧美一级爆毛片| 91看片淫黄大片一级| 捆绑调教一区二区三区| 成人免费小视频| 久久综合九色综合欧美就去吻| 99国内精品久久| 蜜臀va亚洲va欧美va天堂| 一区二区中文字幕在线| 日韩视频免费观看高清完整版在线观看 | 欧美日韩国产片| 粉嫩av一区二区三区粉嫩| 五月天丁香久久| 亚洲日本护士毛茸茸| 欧美电影免费提供在线观看| 色88888久久久久久影院按摩| 国产成人精品aa毛片| 免费观看在线色综合| 亚洲精品美腿丝袜| 国产精品美女久久久久aⅴ | 欧美一区二区免费视频| 一本一道久久a久久精品综合蜜臀| 国产综合久久久久久鬼色| 亚洲图片欧美色图| 亚洲精品午夜久久久| 久久久久久夜精品精品免费| 91精品在线一区二区| 欧洲在线/亚洲| 97久久精品人人做人人爽50路| 久久精品国产精品亚洲综合| 一区二区欧美精品| 一区二区三区精品视频| 亚洲日本韩国一区| 中文字幕亚洲一区二区av在线 | 日韩一区二区三区四区五区六区 | 成人精品视频一区二区三区| 国产综合一区二区| 黄网站免费久久| 久久99久久99精品免视看婷婷 | 91精品免费在线观看| 欧美亚洲日本一区| 欧洲生活片亚洲生活在线观看| 91日韩在线专区| 91麻豆产精品久久久久久| 91在线观看视频| 99久久综合精品| 95精品视频在线| 91久久精品午夜一区二区| www.亚洲精品| 色伊人久久综合中文字幕| 91丨porny丨首页| 在线观看亚洲精品视频| 6080午夜不卡| 日韩精品一区二区三区在线观看| 日韩精品一区二区在线| 久久精品网站免费观看| 中文字幕国产一区| 亚洲女厕所小便bbb| 亚洲h在线观看| 久久精品99久久久| 高清国产一区二区三区| 成人h动漫精品| 欧美在线不卡一区| 欧美一区二区久久| 国产日韩欧美麻豆| 一区二区欧美国产| 麻豆精品一区二区三区| 成人免费视频视频| 欧美亚洲自拍偷拍| 日韩精品中文字幕在线不卡尤物 | 国产欧美精品区一区二区三区| 国产欧美一区在线| 一区二区三区中文在线| 日韩成人精品视频| 国产精品一卡二卡在线观看| 国产69精品久久777的优势| 色噜噜狠狠色综合欧洲selulu| 欧美猛男gaygay网站| 精品国产91洋老外米糕| 国产精品国产三级国产| 亚洲www啪成人一区二区麻豆 | 91在线小视频| 欧美日韩高清影院| 久久婷婷久久一区二区三区| 日韩毛片视频在线看| 蜜臀久久99精品久久久久宅男| 国产99久久久久久免费看农村| 色婷婷激情久久| 欧美videos中文字幕| 亚洲免费在线观看视频| 奇米精品一区二区三区在线观看一| 国产精品一区二区在线播放| 欧美视频在线观看一区| 久久久久久久久久久久久久久99 | 国产主播一区二区三区| caoporn国产精品| 日韩一区二区在线看| 亚洲丝袜精品丝袜在线| 韩国av一区二区三区四区| 91亚洲国产成人精品一区二三 | 欧美激情中文字幕| 视频一区在线播放| 97se亚洲国产综合自在线| 精品av久久707| 午夜精品一区在线观看| 99这里都是精品| 日韩欧美在线网站| 亚洲一区二区三区四区在线 | 国产精品夜夜嗨| 6080国产精品一区二区| 亚洲激情一二三区| 97精品久久久久中文字幕| 久久精品人人做人人爽人人| 日韩一区精品字幕| 在线观看亚洲一区| 亚洲色欲色欲www在线观看| 国产精品12区| 精品88久久久久88久久久| 日韩成人一级大片| 欧美日韩一本到| 亚洲最快最全在线视频| gogogo免费视频观看亚洲一| 国产午夜精品理论片a级大结局| 蜜芽一区二区三区| 日韩一区二区三区视频在线观看| 亚洲成人黄色小说| 欧美性淫爽ww久久久久无| 亚洲另类一区二区| 色综合咪咪久久| 亚洲欧美日本韩国| 在线亚洲精品福利网址导航| 成人免费在线观看入口| 99视频有精品| 亚洲情趣在线观看| 色综合中文综合网| 亚洲18影院在线观看| 欧美体内she精视频| 亚洲午夜在线观看视频在线| 91麻豆免费看片| 一区二区三区免费观看| 欧美亚洲国产一区二区三区 | 久久这里都是精品| 精品一区二区三区久久久| 日韩精品一区二区三区蜜臀| 麻豆中文一区二区| 337p日本欧洲亚洲大胆精品| 国产一区二三区好的| 亚洲国产高清在线| 91视视频在线直接观看在线看网页在线看| 国产精品午夜在线观看| 99国产精品国产精品毛片| 亚洲久草在线视频| 欧美日韩大陆在线| 日韩av不卡在线观看| 久久蜜臀精品av| a级高清视频欧美日韩| 亚洲精品免费播放| 91精品国产综合久久福利软件 | 国产成人在线电影| 国产精品久久久久久久久图文区 | av电影在线观看一区| 一区二区三区 在线观看视频| 制服丝袜av成人在线看| 捆绑调教一区二区三区| 国产精品色婷婷久久58| 欧美亚洲日本一区| 精品一区精品二区高清| 国产精品护士白丝一区av| 欧美日韩精品三区| 国产河南妇女毛片精品久久久|