簡體   English   中英

Python 如何識別函數中的變量是全局變量還是局部變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM