好奇的元组拆包

时间:2014-11-12 11:12:48

标签: python python-2.7 iterable-unpacking

我偶然发现了元组拆包的好奇行为,我起初无法解释。 现在虽然输入这个问题很明显,但我觉得发布它仍然有足够的普遍兴趣。

def test(rng):
    a, b, c = rng if len(rng) == 3 else rng[0], rng[1], 1
    return a, b, c

>>> test((1, 2, 3))
((1,2,3), 2, 3)     
# expected: (1, 2, 3)

>>> test((1,2))
(1,2,1)

为什么它一开始表现得如此出乎意料,但第二眼就有意义了?

1 个答案:

答案 0 :(得分:3)

只需添加一些括号:

>>> def test(rng):
...     a, b, c = rng if len(rng) == 3 else (rng[0], rng[1], 1)
...     return a, b, c
...
>>> test((1, 2, 3))
(1, 2, 3)
>>> test((1,2))
(1, 2, 1)

目前你的行就像:

a, b, c = (rng if len(rng) == 3 else rng[0]), rng[1], 1