关于函数:在python中将参数修改为side-effect

Modify parameter as a side-effect in python

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Python: How do I pass a variable by reference?

我正在尝试编写一个修改传递参数之一的函数。以下是当前代码:

1
2
3
4
5
6
def improve_guess(guess, num):
  return (guess + (num/guess)) / 2

x = 4.0
guess = 2.0
guess = improve_guess(guess, x)

但是,我想以这样一种方式编写代码,我不必做最后的工作。这样,我就可以打电话给:

1
improve_guess(guess,x)

并得到新的猜测值。

(我故意没有提到通过引用,因为在我的网络搜索过程中,我发现了很多关于这个主题的学术讨论,但没有一个清晰的方式来做这件事。我不想在列表中使用全局或封装。)


不能直接这样做,因为整数和浮点类型在Python中是不可变的。

您可以将guess包装成某种可变结构(例如列表或自定义类),但这很快就会变得非常难看。

P.S.我个人非常喜欢guess = improve_guess(guess, x)的明确性质,因为它毫无疑问会修改什么。我甚至不需要知道任何关于improve_guess()的事情就可以弄清楚。


但只有两种方法可以做到这一点:要么使用全局的,要么使用一个可变的类型,比如列表。不能在python中修改不可变的变量:这样做只是将本地名称重新绑定到一个新值。

如果您真的不喜欢包装在列表中,您可以创建自己的类并传递一个可变的实例,但我看不到这样做的任何好处。