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()
裝飾器
實現(xiàn)對無參數(shù)函數(shù)的裝飾器
def set_func(func):
def call_func():
print("裝飾器執(zhí)行")
func()
return call_func
@set_func # 等價于sumNum = set_func(sumNum)
def sumNum():
print("sumNum")
sumNum()
實現(xiàn)對有參數(shù)函數(shù)的裝飾器
# 對有參數(shù)、無返回值的函數(shù)進行裝飾
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ù)進行裝飾
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ù)進行裝飾
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)
多個裝飾器對同一個函數(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)成白色背景的示例代碼
當我們在采集一些圖片的時候,這些圖片的背景經(jīng)常是透明的,但是如何把透明背景轉(zhuǎn)成白色背景呢,接下來就給大家解決這個問題,本文主要介紹了python使用PIL把透明背景圖片轉(zhuǎn)成白色背景,需要的朋友可以參考下2023-08-08
django商品分類及商品數(shù)據(jù)建模實例詳解
這篇文章主要介紹了django商品分類及商品數(shù)據(jù)建模實例代碼內(nèi)容,需要的朋友們學習參考下。2020-01-01
Python數(shù)據(jù)分析matplotlib折線圖案例處理
這篇文章主要介紹了Python數(shù)據(jù)分析matplotlib折線圖案例處理,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08
python selenium 查找隱藏元素 自動播放視頻功能
這篇文章主要介紹了python selenium 查找隱藏元素 自動播放視頻功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07

