web-dev-qa-db-ja.com

リスト内包表記:なぜこれが構文エラーなのですか?

以下のリスト内包表記で、ここでprint(x)が有効でない(SyntaxError)のはなぜですか?

my_list=[1,2,3]
[print(my_item) for my_item in my_list]

対照的に、以下は構文エラーを与えません:

def my_func(x):
    print(x)
[my_func(my_item) for my_item in my_list]
48
monojohnny

Printは関数ではないため、ステートメントであり、式に含めることはできません。これは、通常のPython 2構文を使用すると、より明確になります。

my_list=[1,2,3]
[print my_item for my_item in my_list]

それは正しくありません。 :) my_itemの周りの括弧はあなたをだまします。

これは、Python 3、btw、where print is関数で変更され、コードが正常に機能します。

61
Lennart Regebro

リスト内包表記は、リストを作成するように設計されています。そのため、内部でprintを使用すると、print()を使用するか、2.7または3.xで印刷するかに関係なく、エラーが発生します。コード

[my_item for my_item in my_list] 

タイプリストの新しいオブジェクトを作成します。

print [my_item for my_item in my_list]

この新しいリスト全体を印刷します

参照: ここ

8
Ishan Khare

printは関数ではないため、これは構文エラーです。それは声明です。あなたは明らかにprintからの戻り値を気にしないので(それがないので)、通常のループを書いてください:

for my_item in my_list:
    print my_item
7
Thomas Wouters

python 3で印刷すると、その使用方法がより明確になります。

リスト内包の角括弧は、出力が実際にリストであることを示します。 L1=['a','ab','abc'] print([item for item in L1])これでうまくいくはずです。

0
Cerebration