7

所以显然我不能在 Python (2.7) 中做到这一点:

x = (1, 2,)
(a, b, c) = (*x, 3)

这在我的脑海中是有道理的,但是……我可以创建一个函数:

make_tuple = lambda *elements: tuple(elements)

那我可以

(c, a, b) = make_tuple(3, *x)

但不是,例如

(a, b, c) = make_tuple(*x, 3)
(a, b, c, d) = make_tuple(*x, *x)
y = [3, 4]
(a, b, c, d) = (*x, *y,)

所以我要问的是

  1. 有不允许这样做的理由吗?(第一件事)
  2. 最接近有效的东西是什么?

我目前对#2的猜测:

(a, b, c) = x + (3,)
(a, b, c, d) = x + x
(a, b, c, d) = x + tuple(y)
4

3 回答 3

8

在回答问题 1 时,请阅读PEP 448错误 2292。同样有趣的是邮件列表中的讨论。在简历中,Python 3.4 应该允许你想要的东西。对于问题 2,请参阅其他解决方案。

于 2013-10-01T05:57:03.493 回答
2

不要忘记迭代工具。随着事情变得越来越复杂,它通常更具可读性

>>> from itertools import chain
>>> a,b,c = chain(x, (3,))
>>> a,b,c,d = chain(x, x)
>>> a,b,c,d = chain(x, y)
于 2013-10-01T05:57:50.703 回答
1

你可以在 Python 2.7 中做的是:

(a, b), c = x, 3
于 2013-10-01T05:57:51.810 回答