gpt4 book ai didi

python - 将赋值替换为函数的方法

转载 作者:行者123 更新时间:2023-11-28 21:47:12 25 4
gpt4 key购买 nike

我知道不可能为作为参数传递给函数的变量分配新值。

>>> a = 1
>>> def foo(bar):
... bar = 2
...
>>> foo(a)
>>> a
1

但是可以用方法修改它。

>>> a = [1, 2]
>>> def foo(bar):
... bar.append(3)
...
>>> foo(a)
>>> a
[1, 2, 3]

但是有没有一种方法可以代替赋值(给变量一个全新的值)。让我的第一个示例起作用的东西:

>>> a = 1
>>> def foo(bar):
... bar.assign(2)
...
>>> foo(a)
>>> a
2

我发现的唯一选择是全局变量和设计我自己的

所以我的问题是:

  1. 有这样的方法吗? (或替代方案?)

  2. 如果没有,我一定是设计选择而不是疏忽。为什么这个选择?如果有修改部分值/内容的方法,为什么不用方法来替换/提供全新的值/内容?

最佳答案

python 中的一切都是对象,python 中的对象是可变的,除非它们不是。字符串、数字(int、float)等基本类型是不可变的。 1 始终是 1,您永远无法将 1 变成其他东西。

这实际上是大多数所谓的面向对象语言的情况,并且更像是一种优化。

如您所说,您需要创建自己的对象来包装不可变类型,以便改变新对象的内部结构。您甚至可以创建一个非常简单的类来执行此操作

class Mutatable:
def __init__(self, value):
self.value = value
def assign(self, value):
# in python you cannot overload the = (assignment) operator
self.value = value

现在从你的例子中你可以说

>>> a = Mutatable(1)
>>> def foo(bar):
... bar.assign(2)
...
>>> foo(a)
>>> a.value
out: 2

正如其他一些海报所提到的。 一般编程建议。过度使用突变会导致很难调试应用程序。返回值和引发异常的函数更容易测试和调试。

关于python - 将赋值替换为函数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36879370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com