【发布时间】:2014-09-24 22:38:14
【问题描述】:
我想编写一个 Python 函数来改变其中一个参数(它是一个列表,即可变的)。像这样的:
def change(array):
array.append(4)
change(array)
我更熟悉按值传递而不是 Python 的设置(无论您决定如何称呼它)。所以我通常会写这样一个函数:
def change(array):
array.append(4)
return array
array = change(array)
这是我的困惑。因为我可以改变论点,所以第二种方法似乎是多余的。但是第一个感觉不对。另外,我的特定函数将有几个参数,其中只有一个会改变。第二种方法清楚地说明了正在更改的参数(因为它已分配给变量)。第一种方法没有给出任何指示。有约定吗?哪个更好'?谢谢。
【问题讨论】:
-
为什么第一个“感觉不对”?
-
我想我只是习惯了第二个。正如我所说,当有多个参数时,第一个参数的情况就不太清楚了。
-
请注意
list.append本身什么也不返回,因为它改变了值。内置和标准库中的几乎所有内容都是如此。 -
有一些值得注意的例外,但只有在访问所需的返回值时才会变得麻烦/混乱。例如
list.pop改变列表并返回弹出的值。我相信@abarnert 会同意这些情况是例外,而不是规则。 -
@NeilDuToit:对象是一个参数。 (Python 甚至让你在实现中显式声明相应的参数,如
self。)