![](/img/trans.png)
[英]How interpreter of Python recognize undefined global variable in function?
[英]How does Python recognize whether a variable in a function is global or local?
我知道在主作用域中創建了一個全局變量,要在函數內部為其賦值,我們需要使用關鍵字global
。 但是,要在函數內使用它(例如,打印它),我們不需要使用關鍵字global
。 例如:
s = 5
def foo1():
print(s)
s = 5
def foo2():
global s
s = 6
print(s)
現在我嘗試這樣做:
s = 5
def foo3():
print(s)
s = 'bbb'
print(s)
我打電話給foo3()
。 我知道這是一個錯誤,因為我試圖在不使用關鍵字global
情況下在函數內分配一個全局變量:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in foo3
UnboundLocalError: local variable 's' referenced before assignment
但是,我對為什么不執行foo3()
的第一個print(s)
很感興趣,並且在嘗試運行它時出現錯誤。 在我什至嘗試應用賦值(沒有關鍵字global
)之前,Python 如何識別s
是局部變量?
我假設在定義函數時,Python 根據函數代碼聲明了它的所有局部變量,因此它在賦值之前就知道s
是局部變量,而不是全局變量。 我試圖找到有關此的信息,但找不到(我確定有我沒有看到的信息)。
在定義函數時,Python 會根據函數代碼聲明其所有局部變量。
不是所有的局部變量!
在我看來,Python 聲明了所有函數的局部變量,這些變量在定義或未定義的特定函數中看到,使它們與主變量分開,當您將其設為全局變量時,讀取或寫入變量的值直接存儲到主變量中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.