1: 訪問全域性變數
num =
1def
test()
:print
(num)
# 1
2: 修改全域性變數直接修改全域性的變數將會報錯.
num =
1def
test()
: num +=
1print
(num)
# unboundlocalerror: local variable 'num' referenced before assignment
3: 使用global關鍵字修改全域性變數num =
1def
test()
:global num
num +=
1print
(num)
# 2
4: 函式的區域性作用域是不能夠儲存資訊的,即在函式內部宣告變數在函式呼叫結束之後函式裡面儲存的資訊就被銷毀了,包括函式的引數,如下。def
test
(step)
: num =
1 num = num + step
print
(num)
i =1
while
(i <5)
: test(
) i +=
1# 4 4 4 4
5: 上邊的函式的區域性作用域被銷毀了。那如果要儲存函式的區域性變數,怎麼辦呢?引入「閉包」。如果在乙個函式的內部定義了另乙個函式,外部的我們叫他外函式,內部的我們叫他內函式。在乙個外函式中定義了乙個內函式,內函式裡運用了外函式的臨時變數,並且外函式的返回值是內函式的引用。這樣就構成了乙個閉包。
一般情況下,在我們認知當中,如果乙個函式結束,函式的內部所有東西都會釋放掉,還給記憶體,區域性變數都會消失。但是閉包是一種特殊情況,如果外函式在結束的時候發現有自己的臨時變數將來會在內部函式中用到,就把這個臨時變數繫結給了內部函式,然後自己再結束。
def
test_out
(step)
: num =
1def
test_in()
:# #nonlocal關鍵字的作用和前面的local是一樣的,如果不使用該關鍵字,則不能再內部函式改變「外部變數」的值
nonlocal num
num = num + step
print
(num)
return test_in
test_in = test_out(
"test_out"
)i =
1while
(i <5)
: test_in(
) i +=
1# 4 7 11 13
python閉包怎麼理解 Python 閉包的理解
很多函式型的語言都有閉包這一概念,比如python的兄弟js。人們剛聽到閉包這一概念總會覺得它很晦澀,難以理解。其實不然,主要是他的名字起得太抽象了,讓人誤以為很難。下面舉乙個例子 coding utf 8 def foo nums 0 5 for i in range 5 nums i lambd...
理解Python中的閉包
理解python中的閉包 1.定義 閉包是函式式程式設計的乙個重要的語法結構,函式式程式設計是一種程式設計正規化 而面向過程程式設計和物件導向程式設計也都是程式設計正規化 在面向過程程式設計中,我們見到過函式 function 在物件導向程式設計中,我們見過物件 object 函式和物件的根本目的是...
對於Python閉包的理解
首先看乙個面試中非常常見的題目 def num return lambda x x i for i in range 4 print n 2 for n in num 先看一下num函式的作用,定義了乙個匿名函式,返回傳入引數乘以列表生成式的每乙個元素,所以乍一看結果應該為 0,2,4,6 如果這樣...