Python генератор выражений странность скобки - PullRequest
13 голосов
/ 15 февраля 2012

Я хочу определить, содержит ли список определенную строку, поэтому я использую выражение генератора, например:

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 или просто то, что позволяет моя реализация? Если это законно, каково здесь общее правило?

Ответы [ 2 ]

14 голосов
/ 15 февраля 2012

Это законно, и общее правило заключается в том, что вам нужно заключить в скобки выражение генератора. В качестве специального исключения также учитываются скобки из вызова функции (для функций только с одним параметром). ( Документация )

Обратите внимание, что проверка, если my_string появляется в my_list, так же проста, как и

my_string in my_list

Не требуется выражение генератора или вызов any()!

3 голосов
/ 15 февраля 2012

Это "законно" и явно поддерживается.Общее правило: «((x)) всегда совпадает с (x)» (хотя, конечно, (x) не всегда совпадает с x) и применяется для выражений генератора просто для удобства.

...