2012-05-09 5 views
16

पायथन में निम्नलिखित कथन का क्या अर्थ है?पायथन: रेंज (बार) में "foo() के लिए क्या मतलब है" मतलब?

randrange(10**10) for i in range(100) 

मुझे पता है कि randrange एक यादृच्छिक संख्या जनरेटर है कर रहा हूँ, लेकिन वास्तव में बयान के प्रभाव से बाहर कर सकते।

उत्तर

34

जिस तरह से आपने इसे पोस्ट किया है, यह SyntaxError है।
लेकिन मुझे लगता है कि कथन [] के अंदर है। फिर यह list comprehension है जो 100 यादृच्छिक संख्या वाली एक सूची बनाता है। यह इस कोड के बराबर है:

whatever = [] 
for i in range(100): 
    whatever.append(randrange(10**10)) 

तो कोड के अंदर () बजाय [] यह एक generator expression होगा, अर्थात एक iterable जिसका आइटम तुरंत लेकिन मांग पर नहीं बनाई गई हैं था।

+2

यह एक [] के अंदर था इसलिए मुझे लगता है कि यह एक सूची समझ है .. – KodeSeeker

25

अपने आप में, यह एक वाक्यविन्यास त्रुटि होगी। कोष्ठक में संलग्न है, यह एक generator expression है:

(randrange(10**10) for i in range(100)) 

एक जनरेटर है कि एक समय में randrange(10**10), एक के लिए 100 कॉल के परिणाम निकलेगा देता है।

वर्ग कोष्ठक के अंदर, यह एक list comprehension है:

[randrange(10**10) for i in range(100)] 

100 संख्या randrange(10**10) प्रत्येक के लिए एक कॉल से उत्पन्न की एक सूची देता है।

सूची समझ पर जनरेटर अभिव्यक्ति का लाभ यह है कि इसका आभारी मूल्यांकन किया जाता है, इसलिए आपको पूरी सूची को स्मृति में रखना और रखना नहीं है (जो विशेष रूप से बहुत बड़े, संभावित अनंत जेनरेटर के साथ प्रासंगिक है)।

संबंधित मुद्दे