- python有兩種變量较鼓,全局變量和局部變量椎木。
- 全局變量的scope是整個(gè)module,局部變量是函數(shù)或者class博烂。
看一段代碼:
def test(a, b):
def inner():
print(a)
print(b)
b = 3
inner()
test(1, 2)
會(huì)有一個(gè)錯(cuò)誤:
可以看到b顯示未定義的引用香椎,但是變量a卻沒(méi)有錯(cuò)誤。
神奇的是禽篱,如果把b=3這一行注釋掉畜伐,程序就不會(huì)報(bào)錯(cuò)了。
原因解釋
stackovflow相似問(wèn)題
python 文檔:
When we use the assignment operator (=) inside a function, its default behaviour is to create a new local variable – unless a variable with the same name is already defined in the local scope.
也就是說(shuō)使用賦值運(yùn)算符會(huì)定義一個(gè)新的本地變量躺率。
要造成上面那個(gè)現(xiàn)象還有一個(gè)原因甚至可以說(shuō)是直接原因:
python的內(nèi)部函數(shù)當(dāng)在函數(shù)體中定義了local variable時(shí)不會(huì)再引用外部的同名變量玛界。