兩層函式巢狀,內層函式用到了外層函式的引數,外部函式的變數和內部函式的整體稱為閉包,可以作為引數進行傳遞,傳遞時不僅傳遞函式功能,也傳遞引數
閉包是裝飾器的實現原理
def test1(num):
def test2():
nonlocal num
print(num)
num = 100
print(num)
return test2
t1 = test1(3)
t1()
函式/匿名函式/閉包/物件,當作實參時有什麼區別?
1.匿名函式,能夠完成基本簡單功能,傳遞函式的引用,只有功能
2.普通函式,能完成複雜的功能,傳迪函式的引用
3.閉包,較為複雜的功能,能夠傳遞功能和資料
4.物件,能完成最為複雜的功能,傳遞很多資料和很多功能
裝飾器
#coding=utf-8
def set_func(func):
def call_func():
print("新增的裝飾器的功能**1")
print("新增的裝飾器的功能**2")
return func() # 相當與把被裝飾的函式拉了進來,使用return使裝飾器通用
return call_func
@set_func
def sunny():
print("today is sunny!")
sunny()
裝飾器用到了閉包,內層函式共享外層函式引數,和函式引用作為引數的特點
多個裝飾器裝飾的順序
@set_func0
@set_func1
@set_func2
def sunny():
print("today is sunny!gfsdf")
func2 --> func1 --> func0 --> func0 --> func1 --> func2 --> sunny
類裝飾器
class test(object):
def __init__(self,func):
self.func = func
print("新增的裝飾器的功能**ttttttttt")
def __call__(self, *args, **kwargs):
print("新增的裝飾器的功能**teeeessssssttttt")
return self.func() # 相當與把被裝飾的函式拉了進來
@test
def sunny():
print("today is sunny!gfsdf")
python閉包與裝飾器
首先閉包函式我的理解是,乙個函式內可以巢狀定義乙個函式,並將巢狀定義的函式返回 如果不返回執行完函式物件也就銷毀了 巢狀函式可以接收外部函式的引數,不同引數就可以變更巢狀函式的功能,返回不同功能的巢狀函式物件。以下是閉包函式簡單示例,如果inner函式不接收outer的引數x也就沒有意義了,一定要返...
Python閉包與裝飾器
一.閉包 如果乙個內嵌函式中引用了外部函式中的變數 非全域性變數 那麼該內嵌函式稱之為閉包 也就是將組成函式的語句和這些語句的執行環境打包在一起時,得到的物件 閉包滿足的三個條件 1.必須是內嵌函式 2.外層函式返回值是內嵌函式 3.內嵌函式引用外層函式變數 def funx x def funy ...
Python 閉包與裝飾器
在函式內部再定義乙個函式,並且內部這個函式用到了外邊函式的變數,那麼將內部函式以及用到的一些變數稱之為閉包。兩個函式巢狀,外層函式返回內層函式的引用,外層函式必須傳引數 外層函式不傳參相當於只定義內層函式,沒有什麼用。注意點 由於閉包引用了外部函式的區域性變數,則外部函式的區域性變數沒有及時釋放,消...