Son zamanlarda Python3 kullanmaya başladım ve xrange acıları yok.
Basit bir örnek:
1) Python2:
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) Python3:
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()
Sonuçlar sırasıyla:
1) 1.53888392448 2) 3.215819835662842
Neden? Yani, xrange neden kaldırıldı? Öğrenmek için harika bir araç. Yeni başlayanlar için, tıpkı benim gibi, hepimizin bir noktada olduğu gibi. Neden kaldırmalıyım? Birisi beni uygun PEP'e yönlendirebilir mi, bulamıyorum.
Şerefe.
time
. Kullanımı daha kolay ve yanlış yapmak daha zor olmanın yanı sıra testleri sizin için tekrarlamanın yanı sıra, timeit
hatırlamayacağınız veya hatta nasıl bakacağınızı (GC'yi devre dışı bırakmak gibi) bilmeyeceğiniz her türlü şeyle ilgilenir ve binlerce kat daha iyi çözünürlük.
range
üzerinde x%4 == 0
? Neden sadece teste list(xrange())
karşı değil list(range())
, mümkün olduğunca az yabancı çalışma var? (Örneğin, 3.x'in x%4
daha yavaş yapmadığını nasıl anlarsınız ?) Bu nedenle, neden list
çok fazla bellek ayırmayı içeren devasa bir yapı oluşturuyorsunuz (yavaş olmanın yanı sıra inanılmaz derecede değişken) ?
iter(range)
gereksizdir.
list(range(..))
ve uzun süredir kabul edilen cevabı ve tüm yorumlarını okumak istemeyen herkes için: Python 2'de xrange'i kullandığınız her yerde, python 3'te aralığı kullanın. bir yineleyici döndürmek. Listedeki sonuçlara ihtiyacınız varsa, yapın . Bu, python 2'nin aralığına eşdeğerdir. Ya da başka bir şekilde söylemek gerekirse: xrange aralık olarak yeniden adlandırıldı, çünkü daha iyi varsayılan değerdir; list(range)
gerçekten bir listeye ihtiyacınız varsa , her ikisine sahip olmak gerekli değildi . .
range
Python 3.xxrange
Python 2.x geliyor. Aslında Python 2.xrange
kaldırıldı.