赋值
我是 Python 的新手,但我已经学会了使用所谓的元组进行多个值的赋值和返回。
同时赋值多个值
> a, b = 1, 2
> a
1
> b
2
返回多个值
> def f():
> return 3, 4
>
> f()
(3, 4)
两者的组合也可行
> c, d = f()
> c
3
> d
4
添加
可以使用重载运算符+=
(iadd
)将返回值隐式地添加到变量中。
加法运算符+=
(相应地称为iadd
)
> e = 5
> e += 5
> e
10
也适用于函数
> def g():
> return 10
>
> e += g()
> e
20
问题
我是否正确,上述行为不能同时使用? 我尝试了下面的代码片段,但它对我无效。
> x, y = 1, 2
> x, y += 3, 4
SyntaxError: illegal expression for augmented assignment
> def z():
> return 10, 100
> x, y += z()
SyntaxError: illegal expression for augmented assignment
直到现在,Python一直非常直观。这就是为什么我认为这种方法会立即奏效的原因。
为什么元组没有重载+=运算符?这难道不是保持Python尽可能简单的意义吗?
我找到了两种解决这个“问题”的方法(使用上面提到的x、y、z()):
> import operator
> t = x, y
> tuple(map(operator.add, t, z()))
或者简单点(使用上面的x
,y
,z()
):
> x1, y1 = z()
> x += x1
> y += y1
除了我提到的方法,还有更好或更直观的方法吗?
x
和y
都不是元组,那么我们要改变的是哪个元组呢? - Ma0+=
对于tuples
来说意味着类似于外推的操作,也就是求和形式的总和,如果Python
将其视为合法表达式,那么我想这就是您期望的结果。 - Krishna Oza+=
运算符已经对列表有了意义:它扩展了它们。如果+=
对于元组执行逐元素相加,那么行为将与列表不对称——列表只应该因其可变性而与元组不同。 - Arya McCarthy+
运算符,只会创建一个新的不可变对象。此外,仅右侧的元组是不可变的,左侧的变量并非如此。 - winklerrr