2011-01-25 4 views
6

これは、同様に動作し、私はちょうど関数の引数として発電機に通過させるためのさまざまな構文とPythonで実験した、と私は私がこれをやってきたが、ことに気づき、なぜ関数に渡すときに、ジェネレータの周囲のカッコをPythonで省略することができますか?

>>> 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:私は一貫性を高く評価します(一般的にはPythonも同様です)。しかし、二重引用符は単なる冗長です。 – delnan

+0

@delnan - そうではありません。たとえば、 'sum(jはj、{'a':1、 'b':2} .itititems())の' jです。 'j'と' k'の間のカンマはどのように解釈され、なぜですか? – Omnifarious

答えて

5

私はその質問にお答えしますpython grammarを読んで確信しています。

文法上の英語が好きな人は、PEP-289で説明しています。

+7

Python文法は、 Perlの、心のかすかなためではありません。短い答えは "はい、統語的な砂糖"です。 – delnan

+8

Perlには文法がありますか? –

+0

文法はあなたにできることを伝えます。なぜそれがそのように設計されているのかを教えてくれません。 –

関連する問題