簡體   English   中英

Python scope 當分配從未執行時

[英]Python scope when assignment never performed

所以我明白了

x = 5
def f():
    print(x)

f()
print(x)

返還 5 和 5。

我也明白

x = 5
def f():
    x = 7
    print(x)

f()
print(x)

返回 7 和 5。

以下有什么問題?

x = 5
def f():
    if False:
        x = 7   
        print(x)
    else:
        print(x)

f()
print(x)

我猜想由於x=7從未發生過,我應該再次得到 5 和 5。 相反,我得到

UnboundLocalError: local variable 'x' referenced before assignment

python 是否將x視為局部變量,因為在這個縮進塊中,無論是否執行,都有一個賦值表達式? 具體是什么規則?

當定義 function 時,python 將x解釋為局部變量,因為它是在 function 的主體內分配的。 在運行期間,當您 go 進入else子句時,解釋器會查找未分配的局部變量x

如果您希望兩個x都引用同一個變量,您可以在 function 的主體內添加global x ,然后在它分配之前基本上告訴 python當我調用x我將引用全局范圍x

如果名稱綁定操作發生在代碼塊中的任何位置,則塊中名稱的所有使用都被視為對當前塊的引用。 如果在綁定之前在塊中使用名稱,這可能會導致錯誤。 這個規則很微妙。 Python 缺少聲明,並允許名稱綁定操作發生在代碼塊內的任何位置。 代碼塊的局部變量可以通過掃描塊的整個文本以進行名稱綁定操作來確定。

您需要在 function f()中使用global ,如下所示:

x = 5
def f():
    global x
    if False:
        x = 7   
        print(x)
    else:
        print(x)

f()
print(x)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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