logo

range() vs xrange() v Pythonu

Range() a xrange() jsou dvě funkce, které lze použít k určitému počtu opakování pro smyčky v Pythonu. v Python3 , neexistuje žádný xrange, ale funkce range se chová jako xrange v Pythonu2. Pokud chcete napsat kód, který poběží na Pythonu2 i Pythonu3, měli byste použít range(). Oba jsou implementovány různými způsoby a mají různé vlastnosti. Body srovnání jsou:

  • Typ návratu
  • Paměť
  • Provozní použití
  • Rychlost

Funkce range() v Pythonu

The Funkce Python range(). vrátí posloupnost čísel v daném rozsahu. Nejběžnějším použitím je iterace sekvencí na posloupnosti čísel pomocí smyček Pythonu.



Funkce xrange() v Pythonu

Funkce xrange() v Pythonu se používá ke generování posloupnosti čísel, podobně jako funkce Python range(). Pythonská funkce xrange() se používá pouze v Pythonu 2.x, zatímco funkce range() v Pythonu se používá v Pythonu 3.x.

Návratový typ v range() vs xrange()

Tento xrange() funkce vrací objekt generátoru které lze použít k zobrazení čísel pouze pomocí opakování. Jediný konkrétní rozsah je zobrazen na požádání, a proto je volán líné hodnocení , zatímco v Pythonu funkce range() vrací objekt range (typ iterovatelného).

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))>

>

propojený seznam v Javě
>

Výstup:

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

Rychlost funkcí xrange() a range().

Proměnná ukládající rozsah vytvořeno pomocí range() zabere více paměti ve srovnání s proměnnou ukládající rozsah pomocí xrange(). Základním důvodem je návratový typ range() je seznam a xrange() je objekt xrange().

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))>

něco rychlého
>

>

Výstup:

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

Operace Použití funkcí xrange() a range().

Range() vrátí seznam, všechny operace, které umět být použit na seznamu lze na něm použít. Na druhou stranu, protože xrange() vrací objekt xrange, operace spojené se seznamem nemůže být na ně aplikován, tudíž nevýhoda.

Python3




# 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>])>

>

řetězec do int

>

Chyba:

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

Výstup:

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

Rozdíl mezi range() a xrange() v Pythonu

Vzhledem k tomu, že xrange() vyhodnocuje pouze objekt generátoru obsahující pouze hodnoty, které jsou vyžadovány líným vyhodnocením, je rychlejší v implementaci než range().

Důležité body:

  • Pokud chcete napsat kód, který poběží na Pythonu 2 i Pythonu 3, použijte range(), protože funkce xrange je v Pythonu 3 zastaralá.
  • range() je rychlejší, pokud vícekrát iterujete stejnou sekvenci.
  • xrange() musí pokaždé rekonstruovat celočíselný objekt, ale range() bude mít skutečné celočíselné objekty. (Vždy však bude fungovat hůře, pokud jde o paměť)

rozsah()

xrange()

Vrátí seznam celých čísel. Vrátí objekt generátoru.
Rychlost provádění je nižší Rychlost provádění je rychlejší.
Zabere více paměti, protože uchovává celý seznam prvků v paměti. Zabere méně paměti, protože v paměti uchovává vždy pouze jeden prvek.
Všechny aritmetické operace lze provádět, protože vrací seznam. Takové operace nelze provádět na xrange().
V pythonu 3 není xrange() podporováno. V pythonu 2 se xrange() používá k iteraci v cyklech for.