Python 无法理解输出背后的原因
我对python很陌生,无法理解这一点 考虑我编写的以下程序:Python 无法理解输出背后的原因,python,Python,我对python很陌生,无法理解这一点 考虑我编写的以下程序: def value_updating(value,list_value): value = value+28 list_value.append(120) def main(): value = 15 list_value = [60,90,100] value_updating(value,list_value) print(value,list_value) 我希望输出是43和[60,
def value_updating(value,list_value):
value = value+28
list_value.append(120)
def main():
value = 15
list_value = [60,90,100]
value_updating(value,list_value)
print(value,list_value)
我希望输出是43
和[60,90100120]
。
但口译员给出的答案是15
和[60,90100120]
。
有人能给我解释一下吗?这是因为当你把主作用域中的值15传递给函数时,函数内部的一个不同的值变量在作用域中变为43,但从那时起当你打印(值,列表值)时它就不再返回主值作用域了它正在打印主范围15中值变量的值。 解决办法是
def value_updating(value,list_value):
value = value+28
list_value.append(120)
return value
def main():
value = 15
list_value = [60,90,100]
value = value_updating(value,list_value)
print(value,list_value)
这是因为Python函数是通过对象引用传递的 这意味着可变对象是通过引用传递的,而不可变对象是通过值传递的。因此,函数内部的
value
是外部的value
的新版本(即内存中的不同指针和不同对象),但是list\u value
指向内部和外部的相同对象
以下内容在Python中是不可变的:
- 布尔
- int
- 浮动
- 元组
- str
- 冻结
所有其他变量都是可变的,因此通过引用传递。只需在函数外部取出“print”
def value_updating(value,list_value):
value = value+28
list_value.append(120)
def main():
value = 15
list_value = [60,90,100]
value_updating(value,list_value)
print(value,list_value)
按编码工作。有什么问题吗?为什么预期的输出是错误的?提示:变量范围正如@MarcinOrlowsky提到的,问题在于
值的变量范围。考虑返回<代码>值<代码>,并将其设置为调用函数中的值。整数和列表都是函数的局部变量。但是列表是可变的。如果我错了,请更正马丁。谢谢,顺便说一句