簡體   English   中英

為什么 python 無法通過 function 參數名稱更改訪問全局變量值?

[英]why python can't access global variable value with function parameter name change?

在這兩段代碼中,為什么第二段給出局部變量賦值錯誤? 兩個代碼相似,只是 function 參數不同,在第二個中它能夠讀取全局變量,為什么不在第一個中隨着參數名稱的變化而改變符號表?

第一:

def a(z):
    z+=1
z=3
a(z)

第二個:

def a(z):
    b += 1
b = 5
a(b)

您應該將def塊視為獨立的。

在第一個片段中:

def a(z):
    z+=1

z是什么? 這是a的第一個參數

在第二個片段中:

def a(z):
    b += 1

什么是b 這是未知的。 這就是此代碼失敗的原因。

您還應該注意到,在您的第一個片段中, function 中的zz=3不同:

>>> def a(z):
...     z+=1
...
>>> z=3
>>> a(z)
>>>
>>> z
3

這里沒有使用任何全局變量。

在第一個示例中, z是 function 的參數,而不是全局參數。 請注意,當您增加z時,它不會在調用 scope 中發生變化,因為 function 內部的z是您從 ZC1C425268E68385D1AB5074C17A94F 外部傳入的z的副本。

在第二個示例中, function 中沒有b (參數為z ),這就是為什么當您嘗試修改 function 時會出現錯誤的原因。

要執行您想要執行的操作,您應該將參數設置為可變的 object ,其中包含您要更改的值; 這樣您就可以修改 function 中的值,調用者將可以訪問新值。 您可以為此目的定義一個 class ,或者您可以簡單地將其設為單元素列表:

def a(z):
    z[0] += 1
b = [5]
a(b)  # b == [6]

或者,如果可能,更好的方法 IMO 不依賴於可變性,而只返回新值,要求調用者在其 scope 中明確地重新分配它:

def a(z)
    return z + 1
b = 5
b = a(b)  # b == 6

在第二個代碼中,參數是“z”,您嘗試使用“b”訪問該參數

def a(z):
    b += 1

暫無
暫無

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

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