Python的閉包和裝飾器你真的了解嗎
閉包
閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。
def test1(k, b): def test1_1(x): print(k*x+b) return test1_1 t1 = test1(1, 2) t1(0) t1(1) t1(2)
閉包中修改數(shù)據(jù)
x = 300 def test1(): x = 200 def test2(): nonlocal x print("----1----x = {}".format(x)) x = 100 print("----2----x = {}".format(x)) return test2 t1 = test1() t1()
裝飾器
實(shí)現(xiàn)對無參數(shù)函數(shù)的裝飾器
def set_func(func): def call_func(): print("裝飾器執(zhí)行") func() return call_func @set_func # 等價(jià)于sumNum = set_func(sumNum) def sumNum(): print("sumNum") sumNum()
實(shí)現(xiàn)對有參數(shù)函數(shù)的裝飾器
# 對有參數(shù)、無返回值的函數(shù)進(jìn)行裝飾 def set_func(func): def call_func(num): print("裝飾器") func(num) return call_func @set_func def sumNum(num): print("sumNum = {}".format(num)) sumNum(100)
對不定長參數(shù)的函數(shù)進(jìn)行裝飾
def set_func(func): def call_func(*args, **kwargs): print("裝飾器") func(*args, **kwargs) # 拆包 return call_func @set_func def sumNum(num, *args, **kwargs): print("sumNum = {}".format(num)) print("args = {}".format(args)) print("kwargs = {}".format(kwargs)) sumNum(100, 200, c=100)
對有返回值的函數(shù)進(jìn)行裝飾
def set_func(func): def call_func(*args, **kwargs): print("裝飾器") return func(*args, **kwargs) # 拆包 return call_func @set_func def sumNum(num, *args, **kwargs): print("sumNum = {}".format(num)) print("args = {}".format(args)) print("kwargs = {}".format(kwargs)) return "200 ok" sumNum(100, 200, c=100)
多個(gè)裝飾器對同一個(gè)函數(shù)裝飾
def add_h1(func): def h1(): h1_str = "<h1>" + func() + "</h1>" return h1_str return h1 def add_a(func): def call_func(): a_str = "<a>" + func() + "</a>" return a_str return call_func @add_h1 @add_a def get_str(): return "haha" get_str()
輸出為:<h1><a>haha</a></h1>
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
python使用PIL把透明背景圖片轉(zhuǎn)成白色背景的示例代碼
當(dāng)我們在采集一些圖片的時(shí)候,這些圖片的背景經(jīng)常是透明的,但是如何把透明背景轉(zhuǎn)成白色背景呢,接下來就給大家解決這個(gè)問題,本文主要介紹了python使用PIL把透明背景圖片轉(zhuǎn)成白色背景,需要的朋友可以參考下2023-08-08django商品分類及商品數(shù)據(jù)建模實(shí)例詳解
這篇文章主要介紹了django商品分類及商品數(shù)據(jù)建模實(shí)例代碼內(nèi)容,需要的朋友們學(xué)習(xí)參考下。2020-01-01Python數(shù)據(jù)分析matplotlib折線圖案例處理
這篇文章主要介紹了Python數(shù)據(jù)分析matplotlib折線圖案例處理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08Pandas數(shù)據(jù)分析固定時(shí)間點(diǎn)和時(shí)間差
這篇文章主要介紹了Pandas數(shù)據(jù)分析固定時(shí)間點(diǎn)和時(shí)間差,文章未日澳主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08Django基礎(chǔ)知識與基本應(yīng)用入門教程
這篇文章主要介紹了Django基礎(chǔ)知識與基本應(yīng)用,結(jié)合實(shí)例形式分析了Django框架基本的項(xiàng)目創(chuàng)建、啟動(dòng)、查看版本等操作,并結(jié)合一個(gè)簡單的blog應(yīng)用示例分析了Django的基本使用方法,需要的朋友可以參考下2018-07-07python selenium 查找隱藏元素 自動(dòng)播放視頻功能
這篇文章主要介紹了python selenium 查找隱藏元素 自動(dòng)播放視頻功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07