हाल ही में मैंने Python3 का उपयोग करना शुरू किया और यह xrange हर्ट्स की कमी है।
सरल उदाहरण:
1) पायथन 2:
from time import time as t
def count():
st = t()
[x for x in xrange(10000000) if x%4 == 0]
et = t()
print et-st
count()
2) पायथन 3:
from time import time as t
def xrange(x):
return iter(range(x))
def count():
st = t()
[x for x in xrange(10000000) if x%4 == 0]
et = t()
print (et-st)
count()
परिणाम क्रमशः हैं:
1) 1.53888392448 2) 3.215819835662842
ऐसा क्यों है? मेरा मतलब है, क्यों xrange को हटा दिया गया है? यह सीखने के लिए एक महान उपकरण है। शुरुआती लोगों के लिए, खुद की तरह, जैसे हम सभी किसी बिंदु पर थे। इसे क्यों हटाएं? क्या कोई मुझे उचित पीईपी की ओर इशारा कर सकता है, मैं इसे नहीं ढूंढ सकता।
चीयर्स।
time
। उपयोग करने में आसान होने के अलावा और गलत होने के लिए कठिन है, और आपके लिए परीक्षण दोहराते हुए, timeit
उन सभी प्रकार की चीजों का ध्यान रखता है जिन्हें आप याद नहीं करेंगे, या यहां तक कि कैसे, देखभाल करने के लिए (जैसे जीसी को अक्षम करना), और उपयोग कर सकते हैं हजारों बार बेहतर संकल्प के साथ घड़ी।
range
पर x%4 == 0
? क्यों सिर्फ परीक्षण list(xrange())
बनाम list(range())
, इसलिए वहाँ है संभव के रूप में छोटे से बाहरी काम के रूप में? (उदाहरण के लिए, आप कैसे जानते हैं। 3.x x%4
अधिक धीमी गति से नहीं कर रहा है ?) उस मामले के लिए, आप एक विशाल क्यों बना रहे हैं list
, जिसमें संपूर्ण मेमोरी आवंटन शामिल है (जो धीमा होने के अलावा, अविश्वसनीय रूप से परिवर्तनशील भी है) ?
iter(range)
बेमानी है।
list(range(..))
। यह अजगर 2 की रेंज के बराबर है। या इसे दूसरे तरीके से कहें: xrange का नाम बदल दिया गया है, क्योंकि यह बेहतर डिफ़ॉल्ट है; list(range)
यदि आपके पास वास्तव में सूची की आवश्यकता है , तो दोनों को करना आवश्यक नहीं था । ।
range
पायथन में 3.xxrange
पायथन 2.x से है। यह वास्तव में पायथन 2.xrange
था जिसे हटा दिया गया था।