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,

我对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,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提到的,问题在于
值的变量范围。考虑返回<代码>值<代码>,并将其设置为调用函数中的值。整数和列表都是函数的局部变量。但是列表是可变的。如果我错了,请更正马丁。谢谢,顺便说一句