2011-01-25 20 views
6

मैं सिर्फ एक समारोह के लिए एक तर्क के रूप में एक जनरेटर में पारित करने के लिए अलग अलग वाक्य रचना के साथ अजगर में प्रयोग किया गया था, और मैंने महसूस किया कि हालांकि मैं किया गया है यह कर,जब आप इसे फ़ंक्शन में पास करते हैं तो पाइथन में जेनरेटर के लिए आस-पास के कोष्ठक क्यों छोड़ सकते हैं?

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

इस रूप में अच्छी तरह से काम करता है:

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

यह लिनक्स पर पायथन 2.6.6 पर परीक्षण किया गया है। हुड के नीचे क्या चल रहा है? क्या यह सिर्फ वाक्य रचनात्मक चीनी है? सब के बाद, आम तौर पर एक unwrapped जनरेटर दुभाषिया को अपाठ्य है:

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

मैंने यह भी देखा, और यह वास्तव में मुझे परेशान करता है। मुझे इस तरह व्याकरण अनियमितताओं को पसंद नहीं है, भले ही वे अच्छी वाक्य रचनात्मक चीनी हों। अगर मैं एक विचित्र व्याकरण चाहता था, तो मैं पर्ल में प्रोग्रामिंग करूँगा। – Omnifarious

+0

@ ओमनिफारायस: मैं स्थिरता को अत्यधिक महत्व देता हूं (और आमतौर पर पाइथन भी करता है), लेकिन डबल पैर केवल साधारण अनावश्यक हैं। – delnan

+0

@ डेलनान - वे नहीं हैं। उदाहरण के लिए: 'योग (जे के लिए जे, के में {'ए': 1, 'बी': 2} .iteritems())'। 'J' और' k' के बीच अल्पविराम कैसे समझा जाता है, और क्यों? – Omnifarious

उत्तर

5

मुझे यकीन है कि python grammar पढ़ने इस सवाल का जवाब होगा।

यदि आप व्याकरण पर सादे अंग्रेजी पसंद करते हैं: PEP-289 इसे समझाता है।

+7

पायथन ग्रामर, जबकि लगभग उतना ही बुरा नहीं है पर्ल, दिल की बेहोशी के लिए नहीं है। छोटा जवाब "हां, वाक्य रचनात्मक चीनी" है। – delnan

+8

पर्ल एक व्याकरण है? –

+0

व्याकरण आपको बताएगा * वह * आप कर सकते हैं; यह आपको नहीं बताएगा * क्यों * यह इस तरह से डिजाइन किया गया है। –