Python基礎之閉包函式
文章目錄
閉包的概念
在 Python 中很多地方都會使用到閉包,那麼究竟什麼叫做閉包呢? 在維基百科上是這麼解釋的。
在一些語言中,在函式中可以(巢狀)定義另一個函式時,如果內部的函式引用了外部的函式的變數,則可能產生閉包。閉包可以用來在一個函式與一組“私有”變數之間建立關聯關係。在給定函式被多次呼叫的過程中,這些私有變數能夠保持其永續性。——
維基百科
簡而言之, 閉包的特點就是內部函式引用了外部函式中的變數。 在Python中,支援將函式當做物件使用,也就是可以將一個函式當做普通變數一樣用作另一個函式的引數和返回值。擁有此類特性的語言,一般都支援閉包。
閉包中被內部函式引用的變數,不會因為外部函式結束而被釋放掉,而是一直存在記憶體中,知道內部函式被呼叫結束。
閉包例項
def func():
name = 'python'
def inner():
print(name)
return inner
f = func() # f = func() = inner
f() # f() = inner
# 輸出結果:python
因為作用域的原因,在函式外部就無法拿到函式中的變數和內部函式。通常我們需要使用函式中的變數時,才去將變數返回的辦法。同理,在使用內部函式時,我們也可以將函式名作為返回值返回。 這是閉包最常用的方式。
如何判斷是否是閉包函式
函式名.__closure__
在函式是閉包函式時,返回一個cell元素;不是閉包時,返回None。
輸出cell:
def func():
name = 'python'
def inner():
print(name)
print(inner.__closure__) # (<cell at 0x0000027C14EB85E8: str object at 0x0000027C14F54960>,)
return inner
f = func()
f()
輸出None:
name = 'python'
def func():
def inner():
print(name)
print(inner.__closure__) # None
return inner
f = func()
f()
相關文章
- python基礎知識之函式初階——閉包Python函式
- python基礎之函式Python函式
- 理解Python函式閉包Python函式
- 五、Python函式之基礎Python函式
- 零基礎學習 Python 之閉包Python
- Python 閉包函式說明Python函式
- Python基礎之 4. 函式Python函式
- 函式閉包函式
- Python基礎之白話說函式Python函式
- python基礎之 函式的引數Python函式
- Python基礎之函式的巢狀Python函式巢狀
- python基礎函式Python函式
- Python基礎-函式Python函式
- python函式基礎Python函式
- python 關於 函式物件與閉包Python函式物件
- PHP新特性之閉包、匿名函式PHP函式
- 零基礎學習 Python 之函式Python函式
- go 閉包函式Go函式
- js函式閉包JS函式
- python-函式基礎Python函式
- Python基礎(六) 函式Python函式
- Python基礎(10):函式Python函式
- Python基礎之特殊的函式--裝飾器和偏函式Python函式
- Kotlin基礎之函式Kotlin函式
- 設定模式基礎 之 3閉包模式
- 回撥函式 與 函式閉包函式
- 閉包函式(匿名函式)的理解函式
- 豬行天下之Python基礎——5.1 函式(上)Python函式
- 豬行天下之Python基礎——5.2 函式(下)Python函式
- Python基礎之openpyxl如何實現vlookup函式Python函式
- 函式閉包機制函式
- python基礎--函式全解析Python函式
- python基礎7 - 函式2Python函式
- 《Python 基礎篇》五:函式Python函式
- JS函式表示式——函式遞迴、閉包JS函式遞迴
- 函式物件、裝飾器、閉包函式函式物件
- 『無為則無心』Python函式 — 35、Python中的閉包Python函式
- Python基礎(五)——閉包與lambda的結合Python