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 对此有更多解释。
添加回答
举报