我正在尝试编写一个修改其中一个传递参数的函数。这是当前的代码:
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)
并在猜测中获取新值。
(我故意没有提到传递参考,因为在我的网络搜索过程中,我发现了很多关于这个主题的学术讨论,但没有干净的方法来做这个。我真的不想使用全局或封装在列表中。)
答案 0 :(得分:7)
你不能直接这样做,因为整数和浮点类型在Python中是不可变的。
你可以将guess
包装成某种类型的可变结构(例如列表或自定义类),但这会很快变得非常难看。
P.S。我个人非常喜欢guess = improve_guess(guess, x)
的明确性质,因为它毫无疑问地确定了修改的内容。我甚至不需要了解improve_guess()
来解决这个问题。
答案 1 :(得分:3)
但这是实现它的唯一两种方法:要么使用全局,要么使用类似列表的可变类型。您无法在Python中修改非可变变量:这样做只需将本地名称重新绑定为新值。
如果你真的不喜欢在列表中包装,你可以创建自己的类并传递一个可变的实例,但是我不能看到这样做有什么好处。