21

リストに特定の文字列が含まれているかどうかを判断したいので、次のようにジェネレータ式を使用します。

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

もちろん、これをインライン化したいので、次のようにします。

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

次に、単一の括弧で見栄えが良くなると思うので、次を試します:

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

本当にうまくいくとは思っていません。サプライズ!します!

それで、これは合法的なPythonですか、それとも私の実装が許可するものですか? 合法である場合、ここでの一般的なルールは何ですか?

4

2 に答える 2

22

それは正当であり、一般的な規則として、ジェネレーター式を括弧で囲む必要があります。特別な例外として、関数呼び出しの括弧もカウントされます (パラメーターが 1 つしかない関数の場合)。(ドキュメンテーション)

my_stringに表示されるかどうかのテストは次my_listのように簡単であることに注意してください

my_string in my_list

ジェネレーター式や呼び出しはany()必要ありません!

于 2012-02-15T16:57:48.110 に答える
3

それは「合法」であり、明示的にサポートされています。一般的な規則は((x))、" は常に " と同じであり(x)(もちろん、(x)常に同じであるとは限りませんx)、単に便宜上ジェネレーター式に適用されます。

于 2012-02-15T16:58:59.450 に答える