【发布时间】:2017-10-03 20:20:18
【问题描述】:
分配
我是 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
问题
我是对的,上述行为不能一起使用吗? 我尝试了以下 sn-p 但它对我不起作用。
> 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
除了我提到的方法之外,还有更好甚至更直观的方法吗?
【问题讨论】:
-
为什么不为元组重载 += 运算符?元组是不可变的,添加任何东西到元组没有多大意义。跨度>
-
@ŁukaszRogalski 但
x和y都不是元组,那么我们试图改变的元组是哪一个? -
+=fortuples意味着做一些类似外推的事情,即求和形式的总和,我想如果Python将其视为合法表达式,这就是您所期望的结果。跨度> -
this StackOverflow answer 有更多关于增强分配的信息
-
就这个问题的哲学答案而言:它会在元组和列表之间造成不对称。
+=运算符已经对列表有意义:它扩展了它们。如果+=对元组执行逐元素加法,则列表的行为将是不对称的——列表的可变性应该与元组不同。
标签: python