5

可能重复:
Python:如何通过引用传递变量?

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

def improve_guess(guess, num): 
  return (guess + (num/guess)) / 2

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

但是,我想以不必进行最终分配的方式编写代码。这样,我可以打电话:

improve_guess(guess,x) 

并在猜测中获得新值。

(我故意没有提到通过引用传递,因为在我的网络搜索过程中,我发现了很多关于该主题的学术讨论,但没有明确的方法。我真的不想使用全局变量或封装在列出这个。)

4

2 回答 2

7

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

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

PS我个人真的很喜欢它的明确性质,guess = improve_guess(guess, x)因为它毫无疑问地确定了正在修改的内容。我什至不需要知道任何事情improve_guess()来解决这个问题。

于 2012-12-04T14:34:27.347 回答
3

但这是唯一的两种方法:要么使用全局,要么使用像列表这样的可变类型。您不能在 Python 中修改非可变变量:这样做只会将本地名称重新绑定到新值。

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

于 2012-12-04T14:34:12.560 回答