Range() a xrange() sú dve funkcie, ktoré možno použiť na opakovanie určitého počtu opakovaní pre slučky v Pythone. In Python3 , neexistuje xrange, ale funkcia range sa v Pythone2 správa ako xrange. Ak chcete napísať kód, ktorý bude bežať na Pythone2 aj Pythone3, mali by ste použiť range(). Obe sú implementované rôznymi spôsobmi a majú s nimi spojené rôzne vlastnosti. Body na porovnanie sú:
- Typ návratu
- Pamäť
- Prevádzkové využitie
- Rýchlosť
Funkcia Python range().
The Funkcia Python range(). vráti postupnosť čísel v danom rozsahu. Najbežnejšie sa používa na iteráciu sekvencií na sekvencii čísel pomocou cyklov Pythonu.
Funkcia xrange() v Pythone
Funkcia xrange() v Pythone sa používa na generovanie postupnosti čísel, podobne ako funkcia Python range(). Python xrange() sa používa iba v Pythone 2.x, zatiaľ čo funkcia range() v Pythone sa používa v Pythone 3.x.
Návratový typ v rozsahu () vs xrange ()
Toto xrange() funkcia vráti objekt generátora ktoré je možné použiť na zobrazenie čísel iba v slučke. Jediný konkrétny rozsah sa zobrazí na požiadanie, a preto sa volá lenivé hodnotenie , zatiaľ čo v Pythone funkcia range() vracia objekt rozsahu (typ iterovateľné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))> |
>
c++ rozdelený reťazec
>
Výkon:
The return type of range() is : The return type of xrange() is :>
Rýchlosť funkcií xrange() a range().
Premenná ukladajúca rozsah vytvorené pomocou range() zaberá viac pamäte v porovnaní s premennou ukladajúcou rozsah pomocou xrange(). Hlavným dôvodom je návratový typ range() je zoznam 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))> |
regexp_like v mysql
>
>
Výkon:
The size allotted using range() is : 80064 The size allotted using xrange() is : 40>
Operácie Použitie funkcií xrange() a range().
Range() vráti zoznam, všetky operácie, ktoré môcť možno použiť na zozname. Na druhej strane, keďže xrange() vracia objekt xrange, operácie spojené so zoznamom nemôže aplikované na ne, čo je 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> ])> |
>
>
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ýkon:
The list after slicing using range is : [3, 4, 5] The list after slicing using xrange is :>
Rozdiel medzi range() a xrange() v Pythone
Vzhľadom k tomu, že xrange() vyhodnocuje iba objekt generátora, ktorý obsahuje iba hodnoty, ktoré vyžaduje lenivé vyhodnotenie, je rýchlejšie v implementácii ako range().
Dôležité body:
previesť int na reťazec java
- Ak chcete napísať kód, ktorý bude bežať na Pythone 2 aj Pythone 3, použite range(), pretože funkcia xrange je v Pythone 3 zastaraná.
- range() je rýchlejšia, ak opakovane opakujete rovnakú sekvenciu.
- xrange() musí zakaždým rekonštruovať celočíselný objekt, ale range() bude mať skutočné celočíselné objekty. (Vždy však bude fungovať horšie, pokiaľ ide o pamäť)
rozsah() | xrange() |
---|---|
Vráti zoznam celých čísel. | Vráti objekt generátora. |
Rýchlosť vykonávania je nižšia | Rýchlosť vykonávania je vyššia. |
Zaberá viac pamäte, pretože uchováva celý zoznam prvkov v pamäti. | Zaberá menej pamäte, pretože v pamäti uchováva vždy iba jeden prvok. |
Všetky aritmetické operácie možno vykonávať, pretože vracia zoznam. | Takéto operácie nemožno vykonať na xrange(). |
V pythone 3 nie je xrange() podporované. | V pythone 2 sa xrange() používa na iteráciu v cykloch for. |