Как исправить ошибку NameError с 'xrange' в Python 3
Быстрый ответ
В Python 3 функция xrange
больше не существует. Вместо неё следует использовать функцию range
. Теперь она эффективна в плане использования памяти, как и её прежний аналог!
# Добро пожаловать в мир Python 3!
for i in range(5):
print(i)
Простое замещение xrange
на range
обеспечит совместимость вашего кода с Python 3.
Разбираемся в изменениях
При переходе с Python 2 на Python 3 необходимо учесть не только замену xrange
на range
.
Было возможно в Python 2 обойтись без этого изменения, используя следующий небольшой трюк:
try:
range = xrange # Python 2
except NameError:
pass # Python 3
Такой подход позволит вашей программе работать как на Python 2, так и на Python 3.
Избегаем потенциальных проблем
Поняв, что такое xrange
, стоит помнить и о других изменениях в Python 3:
- Команда
print
требует использования скобок. - Правила выполнения операций деления были изменены.
- Изменилась обработка строк в Unicode, здесь требуется новый подход.
- Библиотеки и модули претерпели значительные обновления и изменения.
Визуализация
Посмотрим, как xrange
превратился в range
в истории Python:
В Python 2 (⏳): **xrange(1, 10)**
# Производится вычисление чисел "на лету", без лишнего занимания памяти!
В Python 3 (🕰️): **range(1, 10)**
# Наследовал все лучшие качества `xrange`, став ещё эффективнее.
Псевдоним range = xrange
обеспечивает обратную совместимость:
Python 2 **xrange** → Python 3 **range**
Пришло время перейти на Python 3 и воспользоваться его преимуществами:
for i in range(1, 10):
print(i)
Добро пожаловать в мир Python 3!
Марафон перехода
Переход на Python 3 требует учета множества деталей:
Обработка текста и данных
В Python 3 строго разделены типы str
и bytes
, что важно для корректной работы с текстовыми и бинарными данными.
Методы работы со словарями
Теперь .keys()
, .values()
и .items()
возвращают view-объекты. Для преобразования к списку используйте конструкцию:
keys_list = list(my_dict.keys())
Обработка исключений
В Python 3 следует использовать скобки при определении кортежей исключений:
try:
except (ExceptionType1, ExceptionType2) as e:
Синтаксические изменения
Среди прочих изменений в Python 2 и Python 3 можно выделить изменения в list comprehensions, делении и распаковке аргументов.