Una delle mie classi richiede compiti da completare in Python, e come un esercizio, che ho fatto che i miei programmi funzionano sia in Python 2 e Python 3, utilizzando uno script come questo:Il "backporting" di `range` di Python 3 in Python 2 è una cattiva idea?
#!/bin/bash
# Run some PyUnit tests
python2 test.py
python3 test.py
One cosa che ho fatto è rendere range
lavoro lo stesso in entrambe le versioni con questo pezzo di codice:
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
questa è una cattiva idea?
EDIT:
La ragione di questo è che xrange
e range
funzionano in modo diverso in Python 2 e Python 3, e voglio che il mio codice per fare la stessa cosa in entrambi. Potrei farlo al contrario, ma far funzionare Python 3 come Python 2 sembra stupido, poiché Python 3 è "il futuro".
Ecco un esempio del perché solo usando range
non è abbastanza buono:
for i in range(1000000000):
do_something_with(i)
sto, ovviamente, non utilizzando l'elenco, ma in Python 2, questo utilizzerà una quantità folle di memoria.
Non funziona davvero con la gamma di Python 2? –
Non direi che sia una cattiva idea, ma sarebbe un brutto riutilizzo del nome 'range'. Se vedo 'range' nel codice Python 2.x, mi aspetterei che restituisca un elenco e non un iteratore e non debba cercare attraverso il codice per vedere se il nome è stato riassegnato. Probabilmente sarebbe più facile usare un nome diverso tutti insieme o anche riutilizzare 'xrange' perché non è definito in Python 3.x. –
Che cosa stai facendo funziona con 'xrange' ma non con' range' di Python 2.x? –