2012-02-15 4 views
9

括弧Pythonのジェネレータ式は、私は、リストには、特定の文字列が含まれているかどうかを確認したいので、私はジェネレータ式を使用し、そのように風変わり

any((s for s in myList if s == myString)) 

その後、私はそれは、単一の括弧で見た目が良くなると思い、私は試してみてください。

any(s for s in myList if s == myString) 

ない本当にEXPEをそれは動作します。驚き!します!

だから、この法律上のPythonや私の実装が可能にちょうど何かがありますか?それが合法であれば、ここでの一般的なルールは何ですか?

答えて

11

それは合法であり、一般的なルールは、あなたがジェネレータ式を括弧で囲む必要がありますということです。特別な例外として、関数呼び出しのかっこもカウントされます(単一のパラメーターのみを持つ関数の場合)。 (Documentation

my_listmy_string表示された場合は、テストなしジェネレータ式

my_string in my_list 

ように簡単ではありませんか、必要に応じany()に呼び出すことを!

+0

お返事ありがとうございます。 'my_string in my_list'は私が試した最初のものでしたが、存在していた文字列を見つけることができませんでした。私は、値の比較ではなくオブジェクトの比較を行っていると結論づけました。これは私が必要とするものです。もう一度チェックします。 – Ari

+0

@Ari:いいえ、値の比較を行います。あなたの場合に何がうまくいかなかったのか分かりません。 –

+0

うん、それは動作します。私はそこに何か他のエラーがあったと思う。 – Ari

3

それは「法的」だ、と明示的サポート。一般的なルールは "は常に(x)と同じです"((x)は必ずしもxと同じとは限りませんが)、便宜上、単にジェネレータ式に適用されます。

+2

「x」はここで何かのためのプレースホルダではありません。 'f((a、b))'はもちろんf(a、b)とは異なります。 –

+1

はい、実際には、単一の式のプレースホルダーです。 –

+0

このルールの参照を提供できますか(その((x)は常に(x)と同じです)? – Ari

関連する問題