Koks skirtumas tarp „Python 2.X“ diapazono ir xrange funkcijų?

Atrodo, kad Xrange yra greitesnis, bet aš nežinau, kodėl jis yra greitesnis (ir nėra jokių įrodymų, be to, iki šiol nėra anekdotinių įrodymų, kad jis yra greitesnis) arba kad jis yra kitoks

 for i in range(0, 20): for i in xrange(0, 20): 
623
18 сент. nustatė Teifionas rugsėjo 18 d 2008-09-18 20:52 '08 at 8:52 pm 2008-09-18 20:52
@ 29 atsakymai

diapazonas sukuria sąrašą, taigi, jei atliksite range(1, 10000000) jis sukuria atmintyje sąrašą su 9999999 elementais.

xrange yra sekos objektas, kuris vertinamas xrange .

Ji turėtų būti pridėta iš @Thiago užuominos, kuri python3 diapazone daro python xrange ekvivalentą

712
18 сент. Charleso atsakymas, pateiktas rugsėjo 18 d. 2008-09-18 20:55 '08 at 8:55 pm 2008-09-18 20:55

diapazonas sukuria sąrašą, taigi, jei atliksite range(1, 10000000) jis sukuria atmintyje sąrašą su 9999999 elementais.

xrange yra generatorius, taigi jis yra sekos, kuri yra vertinama xrange , objektas.

Tai tiesa, bet Python 3 .range() bus įdiegta Python 2. .xrange() . Jei norite sukurti sąrašą, jums reikės:

border=0
 list(range(1,100)) 
213
18 сент. Corey atsakymas 18 Sep 2008-09-18 21:08 '08 at 9:08 pm 2008-09-18 21:08

Atminkite, kad naudokite timeit modulį, kad patikrintumėte, kuris iš mažų kodų fragmentų yra greitesnis!

 $ python -m timeit 'for i in range(1000000):' ' pass' 10 loops, best of 3: 90.5 msec per loop $ python -m timeit 'for i in xrange(1000000):' ' pass' 10 loops, best of 3: 51.1 msec per loop 

Asmeniškai aš visada naudojasi .range() , nebent aš susidorojau su tikrai dideliais sąrašais - kaip matote, milijonų įrašų sąrašo metu, papildoma pridėtinė suma yra tik 0,04 sekundės. Ir, kaip nurodo Corey, Python 3.0 .xrange() išnyks, ir .range() jums vis tiek suteiks gerą iteratoriaus elgesį.

100
19 сент. John Fouhy atsakymas rugsėjo 19 d 2008-09-19 01:11 '08, 1:11 am. 2008-09-19 01:11

xrange išsaugo tik diapazono parametrus ir pagal poreikį generuoja numerius. Tačiau „C“ diegimas „Python“ šiuo metu apriboja savo argumentus su „C“ ilgiais:

 xrange(2**32-1, 2**32+1) # When long is 32 bits, OverflowError: Python int too large to convert to C long range(2**32-1, 2**32+1) # OK --> [4294967295L, 4294967296L] 

Atkreipkite dėmesį, kad „Python 3.0“ yra tik range , ir jis veikia kaip 2.x xrange , bet be apribojimų minimaliems ir maksimaliems taškams.

64
18 сент. Atsakymą duoda efotinis 18 sep . 2008-09-18 21:13 '08 at 9:13 pm 2008-09-18 21:13

xrange grąžina iteratorių ir vienu metu saugo tik vieną numerį atmintyje. diapazonas išlaiko visą atmintyje esančių numerių sąrašą.

37
18 сент. Ben Hoffstein atsakymas rugsėjo 18 d 2008-09-18 20:55 '08 at 8:55 pm 2008-09-18 20:55

Praleiskite šiek tiek laiko su bibliotekos nuoroda . Kuo daugiau esate susipažinę su juo, tuo greičiau rasite atsakymus į tokius klausimus. Ypač svarbūs yra pirmieji keli skyriai apie įterptus objektus ir tipus.

„Xrange“ tipo privalumas yra tas, kad xrange objektas visuomet užims tokį patį kiekį atminties, nepriklausomai nuo to, kokio dydžio jis yra. Nėra sutartų rezultatų.

Kitas būdas rasti greitą „Python“ dizaino informaciją yra docstring ir pagalbos funkcija:

 print xrange.__doc__ # def doc(x): print x.__doc__ is super useful help(xrange) 
28
18 сент. Antti Rasinen atsakymas 18 sep . 2008-09-18 20:55 '08 at 8:55 pm 2008-09-18 20:55

diapazonas () vs xrange () pythone:

diapazonas () ir xrange () yra dvi funkcijos, kuriomis galima pakartoti tam tikrą skaičių kartų „Python“ kilpoms. „Python 3“ nėra xrange, bet diapazono funkcija veikia kaip „xrange“ „Python 2“. Jei norite parašyti kodą, kuris veiks tiek „Python 2“, tiek „Python 3“, turite naudoti intervalą ().

diapazonas () - grąžina skaičių, sukurtų naudojant diapazono () funkciją.

xrange () - ši funkcija grąžina generatoriaus objektą, kuris gali būti naudojamas skaičiuoti tik dviračiu. Pagal poreikį rodomas tik konkretus diapazonas, todėl jis vadinamas „tinginiu reitingu“.

Abi jos įgyvendinamos skirtingai ir su jomis susijusios skirtingos savybės. Palyginimo punktai yra šie:

  1. Grąžinimo tipas
  2. atminties talpa
  3. Naudojimas
  4. greitis

1. Grąžinimo tipas:

diapazonas () grąžina sąrašą kaip grąžinimo tipą.

xrange () grąžina xrange () objektą.

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

Išeiti:

 The return type of range() is : <type 'list'> The return type of xrange() is : <type 'xrange'> 

2. Atmintis:

Kintamasis, saugantis diapazono () sukurtą intervalą, užima daugiau atminties nei kintamasis, saugantis diapazoną naudojant xrange (). Pagrindinė priežastis yra diapazono () grąžinimo tipo sąrašas ir xrange () - xrange () objektas.

 # initializing a with range() a = range(1,10000) # initializing a with xrange() x = xrange(1,10000) # testing the size of a print ("The size allotted using range() is : ") print (sys.getsizeof(a)) # testing the size of a print ("The size allotted using xrange() is : ") print (sys.getsizeof(x)) 

Išeiti:

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

3. Operacijų naudojimas:

Kai diapazonas () grąžina sąrašą, galima naudoti visas operacijas, kurios gali būti taikomos sąrašui. Kita vertus, kadangi xrange () grąžina xrange objektą, su juo susijusios operacijos jiems negali būti taikomos, o tai yra trūkumas.

 # Python code to demonstrate range() vs xrange() # on basis of operations usage # initializing a with range() a = range(1,6) # initializing a with xrange() x = xrange(1,6) # testing usage of slice operation on range() print ("The list after slicing using range is : ") print (a[2:5]) # testing usage of slice operation on xrange() print ("The list after slicing using xrange is : ") print (x[2:5]) 

Išeiti:

 The list after slicing using range is : [3, 4, 5] The list after slicing using xrange is : Traceback (most recent call last): File "pp.py", line 18, in <module> print (x[2:5]) TypeError: sequence index must be integer, not 'slice' 

4. Greitis:

Kadangi xrange () įvertina tik generatoriaus objektą, kuriame yra tik tos vertės, kurių reikalauja tingus vertinimas, todėl greičiau įgyvendinti negu diapazonas ().

Svarbūs dalykai:

  1. Jei norite parašyti kodą, kuris veiks tiek „Python 2“, tiek „Python 3“, naudokite diapazoną (), nes „Python 3“ xrange funkcija yra nebenaudojama.
  2. intervalas () yra greitesnis, jei kelis kartus kartojate per tą pačią seką.
  3. xrange () kiekvieną kartą turėtų atkurti sveikojo skaičiaus objektą, bet diapazonas () turės galiojantį sveikojo skaičiaus objektą. (Tačiau atmintis visuomet bus blogesnė).

Nuoroda

17
05 нояб. atsakymą pateikė Chirag Maliwal 05 lapkričio. 2017-11-05 10:02 '17 10:02 2017-11-05 10:02

Aš esu sukrėstas, niekas neskaito doc :

Ši funkcija yra labai panaši į range() , bet grąžina xrange objektą vietoj sąrašo. Tai nepermatomas sekos tipas, kuris suteikia tas pačias reikšmes, kaip ir atitinkamas sąrašas, faktiškai jų neišsaugant tuo pačiu metu. „ xrange() viršutinio range() pranašumas xrange() minimalus (kadangi xrange() vis tiek turi sukurti vertes, kai paklausiama), išskyrus atvejus, kai diapazonas yra labai naudojamas mašinoje su bado atmintimi arba kai visi diapazono elementai niekada nenaudojami (pvz. kai kilpa paprastai baigiasi break ).

12
07 апр. Atsakymą pateikė Kishor Pawar, balandžio 7 d. 2014-04-07 09:25 '14 ne 9:25 2014-04-07 09:25
Diapazonas

sukuria sąrašą, taigi, jei atliksite diapazoną (1, 10 000 000), jis sukuria atmintyje 10 000 000 elementų sąrašą. xrange yra generatorius, todėl jis vertina tingiai.

Tai du privalumus:

  • Jūs galite pervardyti ilgesnius sąrašus be „ MemoryError .
  • Kadangi jis nusprendžia, kad kiekvienas skaičius yra tingus, jei sustabdysite iteraciją anksčiau, nebeliks laiko sukurti visą sąrašą.
12
18 сент. Atsakymą pateikė Lucas S. 18 sep. 2008-09-18 21:44 '08 at 9:44 pm 2008-09-18 21:44

Šiame paprastame pavyzdyje rasite xrange over range privalumą:

 import timeit t1 = timeit.default_timer() a = 0 for i in xrange(1, 100000000): pass t2 = timeit.default_timer() print "time taken: ", (t2-t1) # 4.49153590202 seconds t1 = timeit.default_timer() a = 0 for i in range(1, 100000000): pass t2 = timeit.default_timer() print "time taken: ", (t2-t1) # 7.04547905922 seconds 

Anksčiau pateiktas pavyzdys neatspindi nieko geriau xrange atveju.

Dabar apsvarstykite tokį atvejį, kai range labai lėtas, palyginti su xrange .

 import timeit t1 = timeit.default_timer() a = 0 for i in xrange(1, 100000000): if i == 10000: break t2 = timeit.default_timer() print "time taken: ", (t2-t1) # 0.000764846801758 seconds t1 = timeit.default_timer() a = 0 for i in range(1, 100000000): if i == 10000: break t2 = timeit.default_timer() print "time taken: ", (t2-t1) # 2.78506207466 seconds 

Su range jis jau sukuria sąrašą nuo 0 iki 100000000 (užtrunka daug laiko), tačiau xrange yra generatorius, ir jis generuoja tik numerius, pagrįstus būtinybe, ty jei iteracija tęsiasi.

„Python-3“ range funkcijų įgyvendinimas yra toks pat, kaip ir „ xrange programoje „Python-2“, o „Python-320“

Laimingas kodavimas!

10
22 окт. Atsakymą pateikė User_Targaryen spalio 22 d. 2016-10-22 14:34 '16 at 14:34 2016-10-22 14:34

Taip yra dėl optimizavimo priežasčių.

diapazonas () sukurs reikšmių sąrašą nuo pradžios iki pabaigos (0 .. 20 jūsų pavyzdyje). Tai taps brangia operacija labai dideliais intervalais.

Kita vertus, xrange () yra daug labiau optimizuotas. jei reikės, ji apskaičiuoja tik kitą vertę (per xrange sekos objektą) ir nesukuria visų vertybių, pvz., diapazono (), sąrašo.

10
18 сент. atsakymas pateikiamas QAZ 18 sep. 2008-09-18 20:59 '08 at 8:59 pm 2008-09-18 20:59

diapazonas (): (1, 10) grąžina 1–10 numerių sąrašą ir saugo visą atminties sąrašą.

xrange (): kaip ir diapazonas (), bet vietoj to, kad grįžtumėte į sąrašą, objektas grąžinamas, kuris generuoja numerius diapazone paprašius. Ciklizacijai tai yra daug greičiau nei diapazonas () ir efektyvesnė atmintis. xrange (), kaip iteratorius, ir generuoja numerius pagal pareikalavimą. („Lazy“ vertinimas)

 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__ xrange([start,] stop[, step]) -> xrange object 
8
23 июня '15 в 11:16 2015-06-23 11:16 Atsakymą pateikė Tushar.PUCSD birželio 23 d., 15 val. 11:16 2015-06-23 11:16

range(x,y) grąžina kiekvieno numerio, esančio tarp x ir y, sąrašą, jei naudojate kilpą ir tada range veikia lėčiau. Tiesą sakant, range turi didesnį indeksų spektrą. range(xy) spausdina visų skaičių tarp x ir y sąrašą

xrange(x,y) grąžina xrange(x,y) , bet jei naudojate kilpą, tada xrange veikia greičiau. xrange turi mažesnį indeksų diapazoną. xrange ne tik spausdina xrange(x,y) , bet vis dar išsaugo visus numerius.

 [In] range(1,10) [Out] [1, 2, 3, 4, 5, 6, 7, 8, 9] [In] xrange(1,10) [Out] xrange(1,10) 

Jei naudojate kilpą, jis veiks.

 [In] for i in range(1,10): print i [Out] 1 2 3 4 5 6 7 8 9 [In] for i in xrange(1,10): print i [Out] 1 2 3 4 5 6 7 8 9 

Naudojant kilpas nėra didelio skirtumo, nors yra skirtumas, kai tik spausdinate.

7
12 июля '16 в 3:05 2016-07-12 03:05 atsakymas pateikiamas Supercolbat liepos 12, 16 d. 3:05 am 2016-07-12 03:05

Python 2.x

diapazonas (x) grąžina atmintyje sukurtą sąrašą, naudodamas x elementus.

 >>> a = range(5) >>> a [0, 1, 2, 3, 4] 

xrange (x) grąžina xrange objektą, kuris yra obj generatorius, generuojantis numerius pagal pareikalavimą. jie skaičiuojami ciklo metu („Lazy“ vertinimas).

Kilpa yra šiek tiek greitesnė už diapazoną () ir efektyvesnę atmintį.

 >>> b = xrange(5) >>> b xrange(5) 
6
28 февр. atsakymas pateikiamas SrmHitter9062 28 vasario mėn. 2016-02-28 12:42 '16 at 12:42 pm 2016-02-28 12:42

Bandant diapazoną, palyginti su xrange, kilpoje (aš žinau, kad turėčiau naudoti timeit , bet jis buvo greitai nulaužtas iš atminties, naudojant paprastą sąrašo supratimo pavyzdį). Radau šiuos dalykus:

 import time for x in range(1, 10): t = time.time() [v*10 for v in range(1, 10000)] print "range: %.4f" % ((time.time()-t)*100) t = time.time() [v*10 for v in xrange(1, 10000)] print "xrange: %.4f" % ((time.time()-t)*100) 

kuris suteikia:

 $python range_tests.py range: 0.4273 xrange: 0.3733 range: 0.3881 xrange: 0.3507 range: 0.3712 xrange: 0.3565 range: 0.4031 xrange: 0.3558 range: 0.3714 xrange: 0.3520 range: 0.3834 xrange: 0.3546 range: 0.3717 xrange: 0.3511 range: 0.3745 xrange: 0.3523 range: 0.3858 xrange: 0.3997 <- garbage collection? 

Arba naudodami „xrange“ tinkle „loop“:

 range: 0.4172 xrange: 0.3701 range: 0.3840 xrange: 0.3547 range: 0.3830 xrange: 0.3862 <- garbage collection? range: 0.4019 xrange: 0.3532 range: 0.3738 xrange: 0.3726 range: 0.3762 xrange: 0.3533 range: 0.3710 xrange: 0.3509 range: 0.3738 xrange: 0.3512 range: 0.3703 xrange: 0.3509 

Ar mano fragmentas yra teisingai išbandytas? Bet kokie komentarai apie lėtesnį Xrange atvejį? Arba geriausias pavyzdys :-)

5
18 марта '11 в 15:04 2011-03-18 15:04 atsakymą pateikė Dave Everitt , kovo 18 d. 11 d. 15:04 2011-03-18 15:04

Kai kurie kiti atsakymai nurodo, kad „Python 3“ išskyrė 2.x range ir pervadino 2.x xrange į range . Tačiau, jei naudojate 3.0 arba 3.1 (kuris neturėtų būti), tai iš tikrųjų yra šiek tiek kitoks.

Kaip 3.1 dokumentai sako:

Diapazono objektai turi labai mažą elgesį: jie palaiko tik indeksavimą, iteraciją ir len funkciją.

Tačiau 3.2+ range - visa seka - ji palaiko išplėstus pjūvius ir visas collections.abc.Sequence metodus su tais pačiais semantikais kaip ir list . *

Ir, bent jau CPython ir PyPy (vienintelės šiuo metu egzistuojančios 3.2+ versijos), ji taip pat turi laiko vykdytojų index ir count o operatoriuje (tol, kol siunčiate tik sveikus skaičius). Tai reiškia, kad 123456 in r yra pagrįstas 3,2+, o 2.7 ar 3.1 atveju tai būtų baisi idėja.


* Tai, kad issubclass(xrange, collections.Sequence) grąžina True 2.6-2.7 ir 3.0-3.1 yra klaida, kuri buvo nustatyta 3.2, o ne atgal.

5
07 мая '15 в 0:57 2015-05-07 00:57 atsakymas į abarnert 07 gegužės 15 d. 0:57 2015-05-07 00:57

xrange () ir diapazonas () pythone veikia taip pat, kaip ir vartotojui, tačiau skirtumas atsiranda, kai kalbame apie tai, kaip atmintis skiriama naudojant abi funkcijas.

Kai mes naudojame diapazoną (), mes skiriame atmintį visiems kintamiesiems, kuriuos jis generuoja, todėl nerekomenduojama naudoti su didele Nr. kintamieji.

xrange (), kita vertus, generuoja tik tam tikrą vertę vienu metu ir gali būti naudojama tik su kilpa, skirta spausdinti visas reikalingas vertes.

4
19 янв. Lakshaya Maheshwari atsakymas, pateiktas 19 sausio 2016-01-19 15:48 '16 at 15:48 2016-01-19 15:48

Perskaitykite šį pranešimą, kad palygintumėte diapazoną ir xrange su grafine analize.

Python Vs xrange diapazonas

3
01 авг. atsakymas pateikiamas Harsha Vardhan 01 rugpjūčio mėn. 2015-08-01 14:37 '15, 14:37 pm 2015-08-01 14:37
Diapazonas

generuoja visą sąrašą ir grąžina jį. xrange yra ne - jis sukuria numerius sąraše pagal pageidavimą.

3
18 сент. Atsakymą pateikė Eddie Deyo 18 sep . 2008-09-18 20:55 '08 at 8:55 pm 2008-09-18 20:55

Kas
range grąžina statinį sąrašą vykdymo metu.
xrange grąžina object (kuris veikia kaip generatorius, nors tai, žinoma, nėra viena), iš kurios sukuriamos vertės, kai ir kada reikia.

Kada naudoti?

  • Naudokite xrange jei norite sukurti milžiniško diapazono sąrašą, pvz., 1 mlrd., Ypač jei turite „jautrią atminties sistemą“, pvz., Mobilųjį telefoną.
  • Naudokite range jei norite kelis kartus pakartoti sąrašą.

PS: Python 3.x funkcijų range == Python 2.x xrange .

2
26 нояб. atsakymą pateikė kmario23 26 lapkritis 2014-11-26 11:18 '14 at 11:18 2014-11-26 11:18

xrange naudoja iteratorių (generuoja reikšmes skrendant), diapazonas grąžina sąrašą.

2
18 сент. atsakymas, kurį pateikė hacama 18 sep . 2008-09-18 20:55 '08 at 8:55 pm 2008-09-18 20:55

Visa tai labai paaiškinta. Bet aš norėjau, kad jis jį matytų pats. Aš naudoju python3. Taigi, atidariau išteklių monitorių („Windows“!) Ir pirmiausia aš vykdiau šią komandą:

 a=0 for i in range(1,100000): a=a+i 

ir tada patikrino atminties „Naudoti“ pakeitimą. Tai buvo nereikšminga. Tada aš paleisčiau šį kodą:

 for i in list(range(1,100000)): a=a+i 

Ir iš karto užtruko daug atminties. Ir aš buvau įsitikinęs. Galite jį išbandyti sau.

Jei naudojate „Python 2X“, pirmame kode pakeiskite „diapazonas ()“ ir „xrange ()“ ir „sąrašas (diapazonas ())“ su „diapazonu ()“.

1
24 июля '17 в 13:37 2017-07-24 13:37 Atsakymą pateikė ANKUR SATYA liepos 24 d., 17 val. 13:37 2017-07-24 13:37

Skirtumas sumažėja mažesnius argumentus range(..) / xrange(..) :

 $ python -m timeit "for i in xrange(10111):" " for k in range(100):" " pass" 10 loops, best of 3: 59.4 msec per loop $ python -m timeit "for i in xrange(10111):" " for k in xrange(100):" " pass" 10 loops, best of 3: 46.9 msec per loop 

Šiuo atveju xrange(100) yra tik 20% efektyvus.

1
30 мая '15 в 14:23 2015-05-30 14:23 atsakymą pateikė Evgeni Sergeev, gegužės 30 d., 15 val. 14:23 2015-05-30 14:23

Jei reikia nuskaityti / spausdinti, 0-N elementų diapazonas ir xrange darbas atliekamas taip.

diapazonas () sukuria naują atmintyje esantį sąrašą ir priima nuo 0 iki N elementų (visi N + 1) ir spausdina juos. xrange () sukuria iteratoriaus egzempliorių, kuris nuskaito elementus ir saugo tik dabartinį rastą elementą atmintyje, todėl jis visada naudoja tą patį kiekį atminties.

Jei reikalingas elementas yra šiek tiek sąrašo pradžioje, tada jis išlaiko gerą laiką ir atmintį.

1
15 янв. atsakymą pateikė „ SomeDoubts“ sausio 15 d 2014-01-15 15:45 '14, 15:45 2014-01-15 15:45

Be to, jei list(xrange(...)) daro list(xrange(...)) atitinka range(...) .

Todėl list lėtas.

Be to, xrange nevisiškai užbaigia seką.

Tad kodėl tai nėra sąrašas, ar tai yra xrange objektas

0
08 окт. Atsakymas pateikiamas U9-Forward 08 okt. 2018-10-08 08:46 '18, 08:46 am 2018-10-08 08:46

Diapazonas grąžina sąrašą , o xrange grąžina xrange objektą, kuris priima tą pačią atmintį, nepriklausomai nuo dydžio intervalo, nes tokiu atveju kiekvienam iteracijai sukuriamas ir prieinamas tik vienas elementas, o naudojant diapazoną visi elementai generuojami nedelsiant ir yra pasiekiami atminties.

0
03 янв. atsakymą pateikė user299567 03 jan. 2015-01-03 09:31 '15 at 9:31 2015-01-03 09:31

diapazonas: - visi bus užpildyti vienu metu. Tai reiškia, kad kiekvienas diapazono numeris užims atmintį.

xrange: -greitas yra kažkas panašaus į generatorių, jis bus rodomas vaizde, jei jums reikia įvairių numerių, tačiau nenorite, kad jie būtų išsaugoti, pavyzdžiui, kai norite naudoti loop.so efektyviam darbui su atmintimi.

0
10 янв. atsakymas duotas tejaswini teju 10 sausio. 2017-01-10 09:00 '17 ne 9:00 2017-01-10 09:00

Nuorodos dokumentuose.

Python 2.7.12

 >>> print range.__doc__ range(stop) -> list of integers range(start, stop[, step]) -> list of integers Return a list containing an arithmetic progression of integers. range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0. When step is given, it specifies the increment (or decrement). For example, range(4) returns [0, 1, 2, 3]. The end point is omitted! These are exactly the valid indices for a list of 4 elements. >>> print xrange.__doc__ xrange(stop) -> xrange object xrange(start, stop[, step]) -> xrange object Like range(), but instead of returning a list, returns an object that generates the numbers in the range on demand. For looping, this is slightly faster than range() and more memory efficient. 

Python 3.5.2

 >>> print(range.__doc__) range(stop) -> range object range(start, stop[, step]) -> range object Return an object that produces a sequence of integers from start (inclusive) to stop (exclusive) by step. range(i, j) produces i, i+1, i+2, ..., j-1. start defaults to 0, and stop is omitted! range(4) produces 0, 1, 2, 3. These are exactly the valid indices for a list of 4 elements. When step is given, it specifies the increment (or decrement). >>> print(xrange.__doc__) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'xrange' is not defined 

Skirtumas yra akivaizdus. „Python 2.x“ range grąžina sąrašą, xrange grąžina xrange objektą, kuris yra pasikartojantis.

Python 3.x range tampa xrange Python 2.x ir xrange yra pašalinami.

0
19 авг. atsakymą pateikė Rajendra Uppal 19 rug. 2017-08-19 08:28 '17, 8:28 2017-08-19 08:28

Jei norite rasti skirtumą tarp diapazono ir xrange, žiūrėkite įrašą:

Citata:

range grąžina tiksliai tai, ką manote: tam tikro ilgio nuoseklių sveikųjų skaičių sąrašas, pradedant nuo 0. xrange , tačiau grąžina „xrange objektą“, kuris yra labai panašus į iteratorių

-1
18 сент. Atsakymas pateikiamas Oko 18 sep. 2008-09-18 20:54 '08 at 8:54 pm 2008-09-18 20:54

Kiti klausimai apie etiketes arba Ask a question