python - 将变量和列表传递给 Python 中的函数

标签 python parameter-passing pass-by-reference pass-by-value

我不明白这种行为:

def getvariable(v):
    v += 1

def getlist(l):
    l.append(8)

myvariable = 1
mylist = [5, 6, 7]

print myvariable, mylist

getvariable(myvariable)
getlist(mylist)

print myvariable, mylist

输出:

1 [5, 6, 7]
1 [5, 6, 7, 8]

为什么列表改变了,但变量没有? 如何更改函数中的变量? 很多人说按值传递、按引用传递、按对象引用传递,所以我有点糊涂,不知道到底是怎么回事。

最佳答案

在 python 中整数是不可变的。 v += 1 仅将一个新的整数值绑定(bind)到名称 v,这在您的函数中是局部的。它不会就地修改整数。

Python 中的列表是可变的。您传递一个列表(通过引用,在 python 中一如既往),函数就地更改它。这就是为什么在函数外部“看到”更改的原因。

python中没有“按值传递”这样的东西。

您可能想要做的是从您的函数返回 v+1,而不是修改绑定(bind)到名称 v 的值。

关于python - 将变量和列表传递给 Python 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16622152/

相关文章:

ios - 计算 uilabel 的高度在传递到另一个 View Controller 后失败

python - 为 GUI 开发设置 PySide/Qt

python - Python中的多行f字符串

python - 如何创建一个包含原始数据帧中所有空值的数据帧?

Java:用ArrayList写pojo最高效的方法

C++ 引用传递

pointers - 接口(interface)的golang地址和接口(interface)区别

python Pandas : how to speed up exporting dataframes to csv?

ios - Objective C - 按值传递和按引用传递

javascript - 如何动态地将参数传递到 Angular 2中的点击事件方法中