2011-01-25 3 views
6

파이썬에서 함수에 대한 인수로 생성자를 전달하기위한 다른 구문을 실험하고 있었는데,이 작업을 수행했지만함수에 전달할 때 파이썬에서 생성자에 대한 괄호를 생략 할 수 있습니까?

>>> sum((j for j in xrange(5))) 
10 

이 방법도 잘 작동합니다.

>>> sum(j for j in xrange(5)) 
10 

이것은 Linux의 Python 2.6.6에서 테스트되었습니다. 후드에서 무슨 일이 일어나고있는거야? 문법적인 설탕일까요? 어쨌든 일반적으로 랩핑되지 않은 생성기는 인터프리터에게 해독 할 수 없다.

>>> j for j in xrange(5) 
    File "<stdin>", line 1 
    j for j in xrange(5) 
     ^
SyntaxError: invalid syntax 
+0

나는 이것을 또한 알아 차렸고, 실제로 그것은 나를 괴롭혔다. 비록 문법적으로 설탕이 좋더라도 이런 문법의 불규칙성을 좋아하지 않습니다. 기괴한 문법을 ​​원한다면 perl로 프로그래밍하고 싶습니다. – Omnifarious

+0

@Omnifarius : 나는 일관성을 매우 중요시하며 (일반적으로 파이썬도 그렇습니다), 이중 괄호는 단순한 중복입니다. – delnan

+0

@delnan - 그렇지 않습니다. 예를 들어,'sum (j는 j, k는 { 'a': 1, 'b': 2} .iteritems())'입니다. 'j'와'k' 사이의 쉼표는 어떻게 해석되고, 왜입니까? – Omnifarious

답변

5

나는 그 질문에 대답 할 python grammar를 읽고 확신합니다.

문법 이상의 일반 영어를 선호하는 경우 : PEP-289에 설명되어 있습니다.

+7

Python 문법은 거의 나쁘지 않습니다. 펄의, 마음이 희미한 사람은 아닙니다. 더 짧은 대답은 "예, 구문 설탕"입니다. – delnan

+8

펄에는 문법이 있습니까? –

+0

문법에 따라 * 할 수 있다고 알려줍니다. 왜 그런 식으로 설계되었는지는 알려주지 않습니다. –