Нещодавно я почав використовувати Python3, і це не вистачає xrange боляче.
Простий приклад:
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()
Результати, відповідно:
1) 1.53888392448 2) 3.215819835662842
Чому так? Я маю на увазі, чому xrange видалено? Це такий чудовий інструмент для навчання. Для початківців, як і я, як і всі ми були в якийсь момент. Навіщо його видаляти? Хтось може вказати мені на належний PEP, я не можу його знайти.
Ура.
time
. Окрім того, що простіше у використанні і складніше помилятися, а також повторювати тести для вас, timeit
піклується про всі речі, про які ви не запам’ятаєте чи навіть не знаєте, як піклуватися про них (як відключення GC), а також може використовувати годинник у тисячі разів кращою роздільною здатністю.
range
на x%4 == 0
? Чому б не просто випробувати list(xrange())
порівняно list(range())
, щоб було якомога менше сторонніх робіт? (Наприклад, як ви знаєте, що 3.x не працює x%4
повільніше?). З цього питання, чому ви будуєте величезний list
, який передбачає цілий ряд розподілу пам'яті (який, окрім повільності, є також неймовірно змінним) ?
iter(range)
є зайвим.
list(range(..))
. Це еквівалентно діапазону python 2. Або сказати іншим способом: xrange було перейменовано на діапазон, оскільки він є кращим за замовчуванням; не потрібно було обох, list(range)
якщо це справді потрібен список. .
range
у Python 3.x -xrange
від Python 2.x. Фактично Python 2.xrange
був видалений.