将变量和列表传递给 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 中的函数的主要内容,如果未能解决你的问题,请参考以下文章

python 类中的变量传递给类中的函数

Python:在函数之间传递变量

如何将变量结构类型传递给 C 中的函数

如何将装饰器中的变量传递给装饰函数中的函数参数?

使用 Ajax 方法将变量传递给 python

传递给 onclick 函数的 blazor 变量参数 [重复]