2013-10-01 9 views
7

だから、明らかに私は、Python(2.7)でこれを行うことはできません。Pythonの:なぜない(A、B、C)=(* X、3)

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) 

答えて

8

を1に疑問を、PEP 448bug 2292をお読みください。また興味深いのは、mailing listのディスカッションです。あなたが望むものはPython 3.4で許可されるべきです。質問2については、他の解決策を参照してください。

+0

興味深い、そして偉大さらに! – Mark

2

itertoolsを忘れないでください。それは物事がより複雑

>>> from itertools import chain 
>>> a,b,c = chain(x, (3,)) 
>>> a,b,c,d = chain(x, x) 
>>> a,b,c,d = chain(x, y) 
+0

おそらく最も良い選択肢ですが、まだ3をタプルにする必要があるのは残念ですが... – Mark

+1

@Mark、組み込みの "flatten"はありませんが、SOの平らなレシピの多くは、 b、c = flatten((x、3)) 'となります。あまり余計な作業をせずに 'flatten(x、3)'をサポートすることができます。 –

1

を得るよう、あなたは、Python 2.7で何ができるか、通常より読みやすいですです:

(a, b), c = x, 3 
+0

確かにこの場合は素晴らしい解決策ですが、あまりにも悪いですが、1つのタプルを作成することはできません – Mark

関連する問題