Warum oder warum nicht?
Antworten
Zu viele Anzeigen?Okay, jeder hier hat eine andere Meinung zu den Kompromissen und Vorteilen von xrange gegenüber range. Sie haben größtenteils recht, xrange ist ein Iterator, und range ergänzt und erstellt eine tatsächliche Liste. In den meisten Fällen werden Sie keinen wirklichen Unterschied zwischen den beiden bemerken. (Sie können map mit range verwenden, aber nicht mit xrange, aber das verbraucht mehr Speicher).
Was ich denke, Sie Rallye zu hören, ist jedoch, dass die bevorzugte Wahl ist xrange. Da range in Python 3 ein Iterator ist, konvertiert das Code-Konvertierungstool 2to3 alle Verwendungen von xrange korrekt in range und gibt einen Fehler oder eine Warnung für Verwendungen von range aus. Wenn Sie sicher sein wollen, dass Sie Ihren Code in Zukunft leicht konvertieren können, verwenden Sie nur xrange und list(xrange), wenn Sie sicher sind, dass Sie eine Liste wollen. Das habe ich während des CPython-Sprints auf der diesjährigen PyCon (2008) in Chicago gelernt.
range()
:range(1, 10)
gibt eine Liste von 1 bis 10 Zahlen zurück und hält die gesamte Liste im Speicher.-
xrange()
: Wierange()
zurück, gibt aber statt einer Liste ein Objekt zurück, das bei Bedarf die Zahlen im Bereich erzeugt. Für Schleifen ist dies leicht schneller alsrange()
und speichereffizienter.xrange()
Objekt wie einen Iterator und erzeugt die Zahlen bei Bedarf (Lazy Evaluation).In [1]: range(1,10) Out[1]: [1, 2, 3, 4, 5, 6, 7, 8, 9]
In [2]: xrange(10) Out[2]: xrange(10)
In [3]: print xrange.doc Out[3]: xrange([start,] stop[, step]) -> xrange object
range()
tut das Gleiche wie xrange()
in Python 3 zu tun, und es gibt keinen Begriff xrange()
existieren in Python 3. range()
kann in manchen Szenarien sogar schneller sein, wenn Sie dieselbe Sequenz mehrmals durchlaufen lassen. xrange()
muss das Integer-Objekt jedes Mal rekonstruieren, aber range()
werden reale ganzzahlige Objekte haben.
- See previous answers
- Weitere Antworten anzeigen