4 回答
TA貢獻1831條經驗 獲得超10個贊
定義的函數是 Q1 返回一個 for 值。x 包含 3 并通過調用函數傳遞給函數f(x)。它會遞增并返回到函數調用。但是,函數調用沒有存儲在變量中,所以它沒有保存到內存中。沒有對返回值進行任何處理。調用該函數只是在局部范圍內(在函數內)編輯變量 x。當你使用print(x)它時,它引用了 x 的全局變量,它仍然包含 3。
在第二季度,列表是可變的。在函數內編輯它們,更改在全局范圍內持續存在。因為該列表在全局范圍內發生了變化,所以 usingprint(x)使用更新后的全局變量。
我希望這是有道理的。查看文檔中變量的范圍以獲取更多信息。
TA貢獻1773條經驗 獲得超3個贊
在 Python 中,列表是可變對象,因此它們在函數調用中使用時通過引用傳遞。這意味著當 g(x) 將 x 的第一個元素加 1 時,函數退出后,原始列表 x 將包含這些更改。
請注意,使用的特定術語不是“按引用傳遞”,而是“按名稱傳遞”,它帶有幾個不同的語義,您可以根據需要了解更多信息。
TA貢獻1824條經驗 獲得超8個贊
Q1
def f(x):
x += 1
return x
x=3
f(x)
print(x)
返回 3 而不是 4 的原因是因為您沒有反彈變量來引用這個新值。而不是f(x)你可以做x = f(x)。
Q2
def g(var):
var[0] = var[0] + 1
return var
x = [3]
g(x)
print(x)
為了在不混淆的情況下回答這個問題,我將函數中使用的局部變量更改為 var,這樣您就可以更輕松地了解我想向您解釋的內容。
首先,您在列表的第一個位置(元素 0)創建一個整數值為 3 的列表,并讓 x 引用該列表。
當您調用 g() 函數并傳遞列表時,該函數將 var 設置為引用相同的列表(不是不同的列表,而是相同的列表)。然后,您告訴該函數將第一個元素中的整數值增加 1。由于列表在某些方法中是可變的,因此您已經更改了局部變量 var 和全局變量 x 的列表。這意味著您實際上不需要使用函數的任何返回值,因為列表已經就地改變了。
看看這個視頻https://youtu.be/_AEJHKGk9ns Ned Batchelder 對此有更多解釋。
添加回答
舉報
