logo

range() versus xrange() in Python

De range() en xrange() zijn twee functies die gebruikt kunnen worden om een ​​bepaald aantal keren te herhalen voor lussen in Python. In Python3 , er is geen xrange, maar de bereikfunctie gedraagt ​​zich als xrange in Python2. Als je code wilt schrijven die zowel op Python2 als Python3 kan draaien, moet je range() gebruiken. Beide worden op verschillende manieren geïmplementeerd en er zijn verschillende kenmerken aan verbonden. De vergelijkingspunten zijn:

  • Retourtype
  • Geheugen
  • Bediening Gebruik
  • Snelheid

Python-bereik() functie

De Python-bereik() functie retourneert een reeks getallen binnen een bepaald bereik. Het meest voorkomende gebruik ervan is om reeksen op een reeks getallen te herhalen met behulp van Python-lussen.



Python xrange()-functie

De functie xrange() in Python wordt gebruikt om een ​​reeks getallen te genereren, vergelijkbaar met de functie range() in Python. De Python xrange() wordt alleen gebruikt in Python 2.x, terwijl de range()-functie in Python wordt gebruikt in Python 3.x.

Retourtype in range() versus xrange()

Dit xbereik() functie retourneert de generator-object die alleen kan worden gebruikt om getallen weer te geven door middel van een lus. Het enige specifieke assortiment wordt op aanvraag weergegeven en dus opgeroepen luie evaluatie , terwijl de functie range() in Python een bereikobject retourneert (een type iterabel).

Python3








# initializing a with range()> a>=> range>(>1>,>10000>)> # initializing a with xrange()> x>=> xrange>(>1>,>10000>)> # testing the type of a> print>(>'The return type of range() is : '>)> print>(>type>(a))> # testing the type of x> print>(>'The return type of xrange() is : '>)> print>(>type>(x))>

>

kandidaat sleutel
>

Uitgang:

The return type of range() is :   The return type of xrange() is :>

Snelheid van xrange() en range() Functie

De variabele die de bereik gemaakt door bereik() neemt meer geheugen in beslag in vergelijking met de variabele die het bereik opslaat met behulp van xrange(). De belangrijkste reden hiervoor is dat het retourtype van range() list is en xrange() het xrange()-object is.

Python3




import> sys> # initializing a with range()> a>=> range>(>1>,>10000>)> # initializing a with xrange()> x>=> xrange>(>1>,>10000>)> # testing the size of a> # range() takes more memory> print> (>'The size allotted using range() is : '>)> print> (sys.getsizeof(a))> # testing the size of x> # xrange() takes less memory> print> (>'The size allotted using xrange() is : '>)> print> (sys.getsizeof(x))>

Acteur Rekha
>

>

Uitgang:

The size allotted using range() is :  80064 The size allotted using xrange() is :  40>

Bewerkingen Gebruik van de functies xrange() en range().

Een range() retourneert de lijst, alle bewerkingen die kan die op de lijst worden toegepast, kunnen erop worden gebruikt. Aan de andere kant, aangezien xrange() het xrange-object retourneert, worden bewerkingen geassocieerd met de lijst kan niet daarop worden toegepast, vandaar een nadeel.

Python3


cm naar voet en inch



# initializing a with range()> a>=> range>(>1>,>6>)> # initializing a with xrange()> x>=> xrange>(>1>,>6>)> # testing usage of slice operation on range()> # prints without error> print> (>'The list after slicing using range is : '>)> print> (a[>2>:>5>])> # testing usage of slice operation on xrange()> # raises error> print> (>'The list after slicing using xrange is : '>)> print> (x[>2>:>5>])>

>

>

Fout:

Traceback (most recent call last):  File '1f2d94c59aea6aed795b05a19e44474d.py', line 18, in   print (x[2:5]) TypeError: sequence index must be integer, not 'slice'>

Uitgang:

The list after slicing using range is :  [3, 4, 5] The list after slicing using xrange is :>

Verschil tussen range() en xrange() in Python

Vanwege het feit dat xrange() alleen het generatorobject evalueert dat alleen de waarden bevat die vereist zijn voor een luie evaluatie, is daarom sneller in implementatie dan range().

Belangrijke punten:

  • Als je code wilt schrijven die zowel op Python 2 als Python 3 kan worden uitgevoerd, gebruik dan range() omdat de xrange-functie verouderd is in Python 3.
  • range() is sneller als dezelfde reeks meerdere keren wordt herhaald.
  • xrange() moet elke keer het integer-object reconstrueren, maar range() zal echte integer-objecten hebben. (Het zal echter altijd slechter presteren in termen van geheugen)

bereik()

xbereik()

Retourneert een lijst met gehele getallen. Retourneert een generatorobject.
De uitvoeringssnelheid is langzamer De uitvoeringssnelheid is sneller.
Neemt meer geheugen in beslag omdat de volledige lijst met elementen in het geheugen wordt bewaard. Neemt minder geheugen in beslag omdat het slechts één element tegelijk in het geheugen bewaart.
Alle rekenkundige bewerkingen kunnen worden uitgevoerd omdat er een lijst wordt geretourneerd. Dergelijke bewerkingen kunnen niet worden uitgevoerd op xrange().
In Python 3 wordt xrange() niet ondersteund. In Python 2 wordt xrange() gebruikt om for-lussen in te voeren.