463 Stimmen

Sollten Sie immer xrange() gegenüber range() bevorzugen?

Warum oder warum nicht?

2voto

Douglas Mayle Punkte 19645

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.

2voto

Tushar Patil Punkte 1249
  • range() : range(1, 10) gibt eine Liste von 1 bis 10 Zahlen zurück und hält die gesamte Liste im Speicher.
  • xrange() : Wie range() 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 als range() 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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X