将变量和列表传递给 Python 中的函数
Posted
技术标签:
【中文标题】将变量和列表传递给 Python 中的函数【英文标题】:Passing variable and list to function in Python 【发布时间】:2013-05-13 09:29:43 【问题描述】:我不明白这种行为:
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]
为什么列表改变了,而变量没有? 如何更改函数中的变量? 很多人说传值、传引用、传对象,所以我有点迷糊,不知道到底是怎么回事。
【问题讨论】:
【参考方案1】:在 python 中,整数是不可变的。 v += 1
仅将一个新的整数值绑定到名称 v
,它在您的函数中是本地的。它不会修改适当的整数。
python 中的列表是可变的。您传递一个列表(通过引用,就像在 python 中一样),该函数将其更改到位。这就是为什么更改会在函数外部“看到”。
python中没有“传值”这种东西。
您可能想要做的是从您的函数中返回 v+1
,而不是修改绑定到名称 v
的值。
【讨论】:
***.com/questions/986006/…他说python总是按值传递 正如该答案的 cmets 所示,该答案中使用的术语令人困惑。如果您习惯了C++
的“按值”arg-passing,这会导致 arg 的 value 被复制和传递,那么我的主张就是:现在有这样的事情(这种)python中的值传递。【参考方案2】:
因为,列表是可变的,而整数是不可变的。
在此处了解更多信息:http://docs.python.org/2/reference/datamodel.html#objects-values-and-types
【讨论】:
以上是关于将变量和列表传递给 Python 中的函数的主要内容,如果未能解决你的问题,请参考以下文章