【问题标题】:Passing variable and list to function in Python将变量和列表传递给 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]

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

【问题讨论】:

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


    【解决方案1】:

    在 python 中,整数是不可变的。 v += 1 仅将一个新的整数值绑定到名称 v,它在您的函数中是本地的。它不会修改适当的整数。

    python 中的列表是可变的。您传递一个列表(通过引用,就像在 python 中一样),该函数将其更改到位。这就是为什么更改会在函数外部“看到”。

    python中没有“传值”这种东西。

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

    【讨论】:

    • stackoverflow.com/questions/986006/…他说python总是按值传递
    • 正如该答案的 cmets 所示,该答案中使用的术语令人困惑。如果您习惯了C++ 的“按值”arg-passing,这会导致 arg 的 value 被复制和传递,那么我的主张就是:现在有这样的事情(这种)python中的值传递。
    【解决方案2】:

    因为,列表是可变的,而整数是不可变的。

    在此处了解更多信息:http://docs.python.org/2/reference/datamodel.html#objects-values-and-types

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-05
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2015-08-31
      相关资源
      最近更新 更多