1. 程式人生 > >python基礎知識整理4——函式閉包

python基礎知識整理4——函式閉包

函式閉包

  • Function Clouse:引用了自由變數的函式既是一個閉包.這個被引用的自由變數和這個函式一同存在,即便它已經離開了創造它的環境也一樣.
  • 比如下面的函式的返回值
def foo():
	I = []
	def bar(i):
		I.append(i)
		return bar
f1 = foo()
f2 = foo()

#實驗下列語句執行結果
f1(1)
f1(2)
f2(3)
  • 深入一點:object.__closure__
  • 作用域
┌───────────────────────────┐
│ built-in namespace        │
├───────────────────────────┤  ↑
│ global namespace          │
│   ┌───────────────────────┤
│   │ local namespace       │  n = 123
│   │   ┌───────────────────┤
│   │   │ local namespace   │  ↑
│   │   │   ┌───────────────┤
│   │   │   │ ...           │  print(n)
└───┴───┴───┴───────────────┘

宣告全域性變數: global 宣告非本層的 區域性變數 : nonlocal 檢視全域性變數: globals() 檢視區域性變數: locals() 檢視變數: vars([object]) # 不傳引數相當於 locals(), 傳入物件後, 會得到 object.__dict__