婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > python高級語法之閉包和裝飾器詳解

python高級語法之閉包和裝飾器詳解

熱門標簽:唐山智能外呼系統一般多少錢 公司電話機器人 白銀外呼系統 激戰2地圖標注 騰訊外呼線路 廣告地圖標注app 海南400電話如何申請 哈爾濱ai外呼系統定制 陜西金融外呼系統

一、閉包

閉包的形成條件:

1.函數嵌套。

2.內部函數使用了外部函數的變量或者參數。

3.外部函數返回了使用外 部變量的內部函數。

二、一個簡單的例子

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)

閉包修改外部函數的變量:

在閉包內修改外部函數的變量需要使用nonlocal關鍵字

def func_out():
    # 外部函數的變量
    num1 = 10
    def func_inner():
        # 在閉包內修改外部函數的變量
        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 簡單裝飾器

裝飾器就是給已有函數增加額外功能的函數,它本質上就是一個閉包函數,也就是說也是一個函數嵌套。裝飾器的功能特點:

1.不修改已有函數的源代碼

2.不修改已有函數的調用方式

3.給已有函數增加額外的功能

用戶在發表評論的時候需要驗證用戶是否登錄,我們首先會想到去修改原來的函數,在函數里面添加一些功能,但是在現在這分工合作的時代,這樣的修改很容易出現修改了祖傳的代碼后,函數出現問題,也影響代碼的高效復用。為了能夠不重新修改原來的評論的代碼,實現高水平的代碼復用。

原本的函數及其調用:

def comment():
    print("執行祖傳代碼.....")
    print("發表評論")
# 調用評論功能
comment()

自己手寫一個實現裝飾器功能的函數實現登錄驗證:

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


def comment():
    print("執行祖傳代碼.....")
    print("發表評論")
# 調用評論功能
comment = decorator(comment)
comment()

輸入結果:

正在驗證登錄者身份…
驗證成功
執行祖傳代碼…
發表評論

3.1.1 使用裝飾器的語法糖

裝飾器的語法糖寫法:@裝飾器名稱

如例子可以改寫為:

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

@decorator
def comment():
    print("執行祖傳代碼.....")
    print("發表評論")

# 調用函數
comment()

運行結果:

正在驗證登錄者身份…
驗證成功
執行祖傳代碼…
發表評論

3.1.2 裝飾器的執行時機

先說結論:在使用裝飾器語法糖時,會先將該裝飾器函數執行一遍。

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

@decorator
def comment():
    print("執行祖傳代碼.....")
    print("發表評論")

輸出結果:

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

3.2 通用裝飾器

裝飾的函數可能有參數傳遞,或者有返回值,上面寫的例子中,如果依然用上面的方法及逆行裝飾器的裝飾將會出現問題,那是否有一個通用的裝飾器能夠裝飾任意函數呢?

3.2.1 裝飾帶有參數的函數

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

3.2.2. 裝飾帶有返回值的函數:

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

3.2.3 實現通用裝飾器

*args: 用于接收元組參數,可傳可不傳

**kwargs: 用于接收字典類型參數,可傳可不傳

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 多個裝飾器的使用

多個裝飾器的過程:由內到外的裝飾過程,先執行內部裝飾器,再執行外部裝飾器。

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

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

def make_div(func):
    print("make_div裝飾器執行了")
    def inner():
        # 在內部函數對已有函數進行裝飾
        result = "div>" + func() +"/div>"
        return result
    return inner

def make_p(func):
    print("make_p裝飾器執行了")
    def inner():
        # 在內部函數對已有函數進行裝飾
        result = "p>" + func() +"/p>"
        return result
    return inner

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

輸出:

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

3.4 帶有參數的裝飾器

帶有參數的裝飾器時機上就是定義了一個函數,讓函數接收參數,再函數內部返回該裝飾器。

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

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

add_num(1,5)

3.5 類裝飾器

使用類裝飾已有函數。

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

# 指向MyDecorator類創建實例對象--> show()==> 對象()
show()

輸出:

–正在進行裝飾-----
hello

到此這篇關于python高級語法之閉包和裝飾器詳解的文章就介紹到這了,更多相關python閉包和裝飾器內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

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

標簽:上海 黑龍江 惠州 益陽 黔西 常德 四川 鷹潭

巨人網絡通訊聲明:本文標題《python高級語法之閉包和裝飾器詳解》,本文關鍵詞  python,高級,語法,之閉包,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python高級語法之閉包和裝飾器詳解》相關的同類信息!
  • 本頁收集關于python高級語法之閉包和裝飾器詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    色综合欧美在线视频区| 日韩欧美三级在线| 亚洲欧美偷拍三级| 国产人成亚洲第一网站在线播放| 91丨porny丨中文| 国产二区国产一区在线观看| 免费看精品久久片| 青草国产精品久久久久久| 亚洲狠狠爱一区二区三区| 亚洲免费伊人电影| 天天综合天天综合色| 婷婷丁香久久五月婷婷| 男女性色大片免费观看一区二区 | 久久这里只精品最新地址| 亚洲精品一区在线观看| 日韩美女天天操| 国产精品传媒入口麻豆| 成人免费小视频| 亚洲一区二区三区在线| 亚洲成在人线在线播放| 国产精选一区二区三区| 成人午夜私人影院| 色欧美片视频在线观看在线视频| 88在线观看91蜜桃国自产| 日韩亚洲欧美一区二区三区| 国产欧美日韩久久| 日韩av电影天堂| 91日韩在线专区| 精品国产一二三区| 一区二区三区在线免费| 另类调教123区| 欧美在线观看视频在线| 国产午夜精品一区二区三区嫩草 | 久久九九久精品国产免费直播| 欧美videossexotv100| 亚洲人成精品久久久久久 | 成人动漫一区二区三区| 欧美日韩小视频| 亚洲欧洲日韩一区二区三区| 蜜臀精品久久久久久蜜臀| av一二三不卡影片| 国产日韩成人精品| 国产成人日日夜夜| 国产嫩草影院久久久久| 国产乱一区二区| 2020日本不卡一区二区视频| 国内精品伊人久久久久影院对白| 午夜精品一区二区三区三上悠亚| 麻豆精品久久精品色综合| 制服丝袜一区二区三区| 激情深爱一区二区| 亚洲欧美自拍偷拍| 欧美色图一区二区三区| 秋霞影院一区二区| 久久久久久久综合| 一本一道波多野结衣一区二区| 中文字幕日韩精品一区| 欧美怡红院视频| 欧美午夜一区二区三区| 五月天欧美精品| 9色porny自拍视频一区二区| 亚洲女爱视频在线| 日韩免费观看2025年上映的电影 | 一区在线播放视频| 色八戒一区二区三区| 日韩1区2区3区| 国产婷婷精品av在线| 91成人免费在线| 成人黄色a**站在线观看| 蜜臀a∨国产成人精品| 国产精品伦一区二区三级视频| 欧美精品 国产精品| 成人短视频下载| 成人激情黄色小说| 国产一区二区伦理片| 蜜臀av亚洲一区中文字幕| 亚洲二区视频在线| 亚洲精品视频一区| 亚洲男女一区二区三区| 国产精品国产自产拍在线| 国产精品每日更新| 亚洲欧洲日韩一区二区三区| 国产日韩综合av| 欧美国产1区2区| 国产欧美日韩卡一| 国产蜜臀97一区二区三区| 精品国产免费久久| xvideos.蜜桃一区二区| 日韩精品在线一区| 亚洲欧美在线另类| 亚洲国产日韩综合久久精品| 亚洲成人免费视频| 精品一区二区精品| 国产99久久久国产精品免费看| 国产精品香蕉一区二区三区| 成人激情黄色小说| 欧美福利一区二区| 国产欧美精品一区二区色综合朱莉| 久久久久97国产精华液好用吗| 国产精品久久久久毛片软件| 亚洲精选视频免费看| 九九视频精品免费| 欧美在线制服丝袜| 26uuu精品一区二区在线观看| 亚洲日本在线看| 免费成人av资源网| 99精品视频在线免费观看| 日韩亚洲国产中文字幕欧美| 国产精品无码永久免费888| 天堂午夜影视日韩欧美一区二区| 国产精品一区免费在线观看| 色综合久久综合网97色综合 | 亚洲.国产.中文慕字在线| 国产在线不卡一卡二卡三卡四卡| 在线观看一区日韩| 亚洲欧美电影院| 不卡在线视频中文字幕| 欧美国产日韩一二三区| 国产福利一区二区三区在线视频| 欧美军同video69gay| 日韩二区三区四区| 日韩一区二区在线看| 日本va欧美va精品发布| 日韩精品一区国产麻豆| 狠狠色丁香久久婷婷综| 日韩欧美国产午夜精品| 国产一区二区视频在线播放| 2014亚洲片线观看视频免费| 狠狠色丁香婷综合久久| 中文字幕+乱码+中文字幕一区| 成人国产精品视频| 亚洲午夜影视影院在线观看| 在线观看免费亚洲| 日韩 欧美一区二区三区| 久久女同精品一区二区| 国产999精品久久| 亚洲精品中文字幕乱码三区| 色www精品视频在线观看| 日韩国产精品91| 国产欧美日本一区视频| 91成人网在线| 国产成人精品午夜视频免费| 一区二区三区小说| 精品国一区二区三区| 97成人超碰视| 一区二区三区日韩在线观看| 日韩三区在线观看| 色噜噜狠狠色综合中国| 国产乱码精品一区二区三区忘忧草 | 精品日韩成人av| 成人h动漫精品一区二区| 另类中文字幕网| 亚洲福利电影网| 亚洲色图一区二区| 18涩涩午夜精品.www| 精品精品国产高清a毛片牛牛 | 久久先锋影音av鲁色资源| 91成人免费在线| 色又黄又爽网站www久久| 粉嫩一区二区三区在线看| 久久国产精品99久久人人澡| 日本一不卡视频| 久国产精品韩国三级视频| 丝袜美腿一区二区三区| 日本视频一区二区| 日本欧美在线看| 国产真实乱子伦精品视频| 免费不卡在线观看| 韩国视频一区二区| 成人黄色电影在线| 成人精品免费网站| 色妞www精品视频| 91精品国产综合久久福利| 欧美日本视频在线| 国产亚洲成aⅴ人片在线观看| 亚洲欧洲www| 久久精品久久99精品久久| 国产精品资源在线看| 欧美综合在线视频| 日韩区在线观看| 亚洲婷婷在线视频| 黄一区二区三区| 欧美日韩卡一卡二| 久久综合久久鬼色| 亚洲成人精品在线观看| 国产盗摄精品一区二区三区在线| 夜夜嗨av一区二区三区网页| 亚洲日本va在线观看| 午夜精品福利一区二区蜜股av| 美洲天堂一区二卡三卡四卡视频| 国产成人在线视频免费播放| 欧美综合在线视频| 国产精品国产三级国产有无不卡| 久久成人久久鬼色| 国产成人福利片| 日韩一区二区三区在线视频| 日韩一区在线看| 国内精品久久久久影院薰衣草| 91视频免费播放| 国产精品毛片高清在线完整版|