2012-02-15 3 views
9

괄호, 그래서 나는과 같이, 발전기 식을 사용 :이 인라인 할 물론파이썬 발전기 표현은 내가리스트가 특정 문자열이 포함되어 있는지 확인하려면 이상한

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) 

정말 expe의를 작동시키는 것. 놀람! 그렇습니다!

이 합법적 인 Python이 무엇입니까? 아니면 구현시 허용되는 것입니까? 그것이 합법적이라면, 여기에 일반적인 규칙은 무엇입니까?

답변

11

일반적으로 발전기 표현을 둘러싼 괄호가 필요합니다. 예외적으로, 함수 호출의 괄호는 count (단일 매개 변수 만있는 함수의 경우)입니다. (Documentation)

참고 테스트 my_string 경우가 my_list에 표시되는지 쉽게

my_string in my_list 

등 없음 발전기 발현 또는 any() 필요에 전화도 없다!

+0

답변 해 주셔서 감사합니다. 'my_string in my_list'는 내가 시도한 첫 번째 것이었지만, 존재하는 문자열을 찾지 못했습니다. 필자는 가치 비교가 아니라 객체 비교를하고 있다고 결론을 내렸다. 다시 확인해 볼게. – Ari

+0

@ 아리 : 아니, 값 비교를 수행합니다. 나는 네 사건에서 무엇이 잘못되었는지 모른다. –

+0

예, 작동합니다. 나는 거기에 다른 오류가 있었다고 생각한다. – Ari

3

"합법적"이며 명시 적으로 지원됩니다. 일반적인 규칙은 "((x))은 항상 (x)과 같습니다."((x)은 항상 x과 동일하지는 않지만) 편의를 위해 생성기 표현식에 적용됩니다.

+2

'x'는 여기서 분명히 알 수있는 곳입니다. 'f ((a, b))'는 물론'f (a, b)'와는 다릅니다. –

+1

예, 실제로 단일 표현식의 자리 표시 자입니다. –

+0

이 규칙에 대한 참조를 제공 할 수 있습니까? (((x))는 항상 (x)와 동일합니까? – Ari

관련 문제