Récemment, j'ai commencé à utiliser Python3 et son manque de xrange fait mal.
Exemple simple:
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()
Les résultats sont respectivement:
1) 1,53888392448 2) 3,215819835662842
Pourquoi donc? Je veux dire, pourquoi xrange a été supprimé? C'est un excellent outil pour apprendre. Pour les débutants, tout comme moi, comme nous l'étions tous à un moment donné. Pourquoi l'enlever? Quelqu'un peut-il m'indiquer le PEP approprié, je ne le trouve pas.
À votre santé.
time
. En plus d'être plus facile à utiliser et plus difficile de se tromper, et de répéter les tests pour vous, timeit
prend soin de toutes sortes de choses dont vous ne vous souviendrez pas, ou même ne savez pas comment vous en occuper (comme désactiver le GC), et pouvez utiliser un horloge avec des milliers de fois une meilleure résolution.
range
sur x%4 == 0
? Pourquoi ne pas simplement tester list(xrange())
vs list(range())
, donc il y a aussi peu de travail étranger que possible? (Par exemple, comment savez-vous que 3.x ne fonctionne pas x%4
plus lentement?) D'ailleurs, pourquoi construisez-vous un énorme list
, ce qui implique beaucoup d'allocation de mémoire (qui, en plus d'être lent, est également incroyablement variable) ?
iter(range)
est redondant.
list(range(..))
. Cela équivaut à la plage de python 2. Ou pour le dire d'une autre manière: xrange a été renommé plage, car c'est la meilleure valeur par défaut; il n'était pas nécessaire d'avoir les deux, list(range)
si vous avez vraiment besoin d'une liste. .
range
en Python 3.x estxrange
de Python 2.x. Ce sont en fait les Python 2.xrange
qui ont été supprimés.