यह मेरी समझ है कि range()फ़ंक्शन, जो वास्तव में पायथन 3 में एक ऑब्जेक्ट प्रकार है , जनरेटर के समान मक्खी पर अपनी सामग्री उत्पन्न करता है।
यह मामला होने के नाते, मुझे उम्मीद है कि निम्न पंक्ति समय की एक विषम राशि लेगी, क्योंकि यह निर्धारित करने के लिए कि क्या 1 क्वाड्रिलियन सीमा में है, एक क्वाडरिलिन मान उत्पन्न करना होगा:
1000000000000000 in range(1000000000000001)
इसके अलावा: ऐसा लगता है कि कोई फर्क नहीं पड़ता कि मैं कितने शून्य जोड़ता हूं, गणना कम या ज्यादा समय (मूल रूप से तात्कालिक) समान समय लेती है।
मैंने इस तरह की चीजों की भी कोशिश की है, लेकिन गणना अभी भी लगभग तत्काल है:
1000000000000000000000 in range(0,1000000000000000000001,10) # count by tens
अगर मैं अपने स्वयं के रेंज फ़ंक्शन को लागू करने का प्रयास करता हूं, तो परिणाम इतना अच्छा नहीं है !!
def my_crappy_range(N):
i = 0
while i < N:
yield i
i += 1
return
range()हुड के नीचे क्या वस्तु है जो इसे इतनी तेजी से बनाती है?
मार्टिज़न पीटरर्स का जवाब इसकी पूर्णता के लिए चुना गया था, लेकिन पायथन 3 में पूर्ण अनुक्रम होने के लिए इसका क्या मतलब है , और इसकी कुछ जानकारी / चेतावनी पायथन कार्यान्वयन के लिए फ़ंक्शन अनुकूलन के लिए संभावित झुकाव के बारे में कुछ जानकारी / चेतावनी के बारे में चर्चा करने के लिए एब्नर्ट का पहला उत्तर भी देखें। । एब्नर्ट का अन्य उत्तर कुछ और विस्तार में जाता है और पायथन 3 में अनुकूलन के पीछे के इतिहास में रुचि रखने वालों के लिए लिंक प्रदान करता है (और पायथन 2 में अनुकूलन के अभाव में )। पोक द्वारा और वाइम के उत्तर प्रासंगिक सी स्रोत कोड और रुचि रखने वालों के लिए स्पष्टीकरण प्रदान करते हैं।range__contains__xrange
rangeजनरेटर है?
xrangeके समानrange नहीं है ?
xrange()ऑब्जेक्ट्स की कोई __contains__विधि नहीं है, इसलिए आइटम चेक को सभी आइटमों के माध्यम से लूप करना पड़ता है। प्लस वहाँ में कुछ अन्य परिवर्तन कर रहे हैं range(), जैसे कि यह टुकड़ा करने की क्रिया का समर्थन करता है (जो फिर से एक रिटर्न rangeभी वस्तु) और अब है countऔर indexतरीकों के साथ संगत बनाने के लिए collections.Sequenceएबीसी।
boolयाlongप्रकार है, अन्य वस्तु प्रकारों के साथ यह पागल हो जाएगा। के साथ कोशिश करें:100000000000000.0 in range(1000000000000001)