##
4 リスト表現

リスト表現は、角括弧で囲われた式の系列です。系列は空の系列であっても かまいません:

  test | ::= | and_test ( "or" and_test )* | lambda_form
  testlist | ::= | test ( "," test )* [ "," ]
  list_display | ::= | "[" [listmaker] "]"
  listmaker | ::= | expression ( list_for | ( "," expression )* [","] )
  list_iter | ::= | list_for | list_if
  list_for | ::= | "for" expression_list "in" testlist [list_iter]
  list_if | ::= | "if" test [list_iter]

  Download entire grammar as text.

リスト表現は、新に作成されたリストオブジェクトを表します。 新たなリストの内容は、式のリストを与えるか、リストの内包表記 (list comprehension) で指定します。 カンマで区切られた式のリストを与えた場合、リストの各要素は左から 右へと順に評価され、評価された順番にリスト内に配置されます。 リストの内包表記を与える場合、内包表記はまず単一の式、続いて 少なくとも一つの `for` 節、続いてゼロ個以上の `for` 節か、`if` 節になります。 この場合、新たに作成されるリストの各要素は、各々の `for` や `if` 節を左から右の順にネストしたブロックとみなして実行し、 ネストの最内ブロックに到達する度に式を評価した値となります。 4

#### Footnotes

... ネストの最内ブロックに到達する度に式を評価した値となります。4
  Python 2.3 では、リスト内包が "`for`" の中で使う制御 変数を内包表記を書いたスコープに「漏らして」しまう仕様になって いました。この挙動は撤廃されたので、将来のバージョンでバグが修正 されれば、この挙動に依存したコードは動作しなくなります。