Una de mis clases requiere tareas que deben completarse en Python, y como un ejercicio, he estado haciendo que mis programas funcionan tanto en Python 2 y Python 3, utilizando un script como el siguiente:¿Es una "mala idea" "backporting" el "rango" de Python 3 para Python 2?
#!/bin/bash
# Run some PyUnit tests
python2 test.py
python3 test.py
Uno lo que he estado haciendo es hacer el trabajo range
el mismo en ambas versiones con este pedazo de código:
import sys
# Backport Python 3's range to Python 2 so that this program will run
# identically in both versions.
if sys.version_info < (3, 0):
range = xrange
¿es esta una mala idea?
EDIT:
La razón de esto es que xrange
y range
funcionan de forma diferente en Python 2 y Python 3, y yo quiero que mi código para hacer lo mismo en ambos. Podría hacerlo al revés, pero hacer que Python 3 funcione como Python 2 parece estúpido, ya que Python 3 es "el futuro".
He aquí un ejemplo de por qué sólo usar range
no es lo suficientemente bueno:
for i in range(1000000000):
do_something_with(i)
Estoy, obviamente, no utilizando la lista, pero en Python 2, para ello se utiliza una cantidad insana de memoria.
¿Realmente no funciona con el rango de Python 2? –
No diría que es una mala idea, pero sería malo reutilizar el nombre 'range'. Si veo 'range' en el código de Python 2.x, esperaría que devuelva una lista y no un iterador y no tenga que buscar a través del código para ver si el nombre ha sido reasignado. Probablemente sea más fácil usar un nombre diferente o incluso reutilizar 'xrange' ya que no está definido en Python 3.x. –
¿Qué estás haciendo que funciona con 'xrange' pero no con' range' de Python 2.x? –