在python中将参数修改为副作用

时间:2012-12-04 14:29:17

标签: python function parameter-passing

  

可能重复:
  Python: How do I pass a variable by reference?

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

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) 

并在猜测中获取新值。

(我故意没有提到传递参考,因为在我的网络搜索过程中,我发现了很多关于这个主题的学术讨论,但没有干净的方法来做这个。我真的不想使用全局或封装在列表中。)

2 个答案:

答案 0 :(得分:7)

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

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

P.S。我个人非常喜欢guess = improve_guess(guess, x)的明确性质,因为它毫无疑问地确定了修改的内容。我甚至不需要了解improve_guess()来解决这个问题。

答案 1 :(得分:3)

但这是实现它的唯一两种方法:要么使用全局,要么使用类似列表的可变类型。您无法在Python中修改非可变变量:这样做只需将本地名称重新绑定为新值。

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