2016-09-07 7 views
3

を構築:*要素なくなり*の要素を説明してください、=反復可能でPEP448から

、=反復可能な、要素はリスト、要素= *反復可能なことになり、要素はタプルされます。この理由は、構築物に慣れていない人々を混乱させる可能性があるからです。

まあ、私はその人の一人です。私は試してみました:

>>> *e, = range(3) 
>>> e 
[0, 1, 2] 

>>> e = *range(3), 
>>> e 
(0, 1, 2) 

前者はPython 3.4と3.5で動作します。

3.5以降のみ。前述のPEP448によって導入された新機能です。それはそのPEPに記述されていますが、問題はありません。

しかし、前に*elements, = iterableを見たことがありません。それがどのように機能し、なぜリストを作成するのか説明してください。

+3

[PEP 3132 - 拡張Iterableアンパック](https://www.python.org/dev/peps/pep-3132/) –

+0

@AshwiniChaudhary完璧な答え、ありがとう。 – VPfB

答えて

5

はい、これは新しい機能です。それはリストの残りの部分を解凍する必要があるために行われました。だから、例を見てみましょう:

>>> a, *e = range(3) 
>>> print(a, e) 
0 [1, 2] 

>>> a, *e, b = range(3) 
>>> print(a, e, b) 
0 [1] 2 

を今すぐあなたの例:

>>> *e, = range(3) 
>>> print(e) 
[0, 1, 2] 

は同等です:

>>> (*e,) = range(3) 
>>> print(e) 
[0, 1, 2] 

だからカンマが(*e,)反復可能なこと一つの要素作るだけのためのものです。だから、Pythonはrange(3)の "残り"がである場合、eに入れなければならないことを知っています。

そうでない場合は使用して:

>>> *e = range(3) 
    File "<stdin>", line 1 
SyntaxError: starred assignment target must be in a list or tuple 

それは動作しません。

残りの説明はlinkです。

+0

ありがとうございます。リストを作成する理由は答えられませんでしたが、リンクされたPEP3132は「仕様」セクションにそれを示しています。 – VPfB

+0

私は主な質問に従っていました。「*要素、= iterable構造を説明してください。私は答えようとします、gimmie a sec。 – turkus

+0

@VPfBよ、ありがとう。 – turkus

関連する問題