Re: range() vs. xrange() (bylo RE: [python] dotaz-mřížka)

Ivo Štolpa pussa na pussa.cz
Středa Duben 6 17:57:18 CEST 2005


Ondřej Súkup napsal(a):

> Petr Prikryl napsal(a):
>
>> Ondřej Súkup napsal...
>>
>>> Petr Prikryl napsal(a):
>>> [...]
>>>
>>>> Místo range(DELKA) je lepší používat xrange(DELKA).
>>>
>>>
>>> co se tyká budoucnosti moc ne ....
>>> xrange je na seznamu to be removed 
>>> http://www.python.org/peps/pep-3000.html
>>> tak ze pod budoucími verzemi pythonu nepouzitelne
>>
>>
>>
>> Dovolím si důrazně nesouhlasit. Stejný dokument
>> říká, že range() má vracet iterátor. Jinými slovy
>> to znamená, že se staré range() má zcela zrušit
>> a xrange() se má přejmenovat na range().
>>
>> Uvedený dokument je navíc věnován "hypotetické
>> budoucí verzi Pythonu" a slouží spíš pro diskusi
>> a ověřování nápadů při dalším vývoji.
>>
>> Hlavním důvodem pro můj důrazný nesouhlas je
>> rozdíl ve funčnosti (efektivnosti) range()
>> a xrange(). Jméno není tak důležité. Přejmenování
>> funkce se dá v Pythonu dosáhnout velmi snadno:
>>
>>
>>>>> range
>>>>
>>
>> <built-in function range>
>>
>>>>> xrange
>>>>
>>
>> <type 'xrange'>
>>
>>>>> range = xrange
>>>>> range
>>>>
>>
>> <type 'xrange'>
>>
>>
>> Tím už nyní dosáhnu toho, že se zahodí odkaz na zabudovanou funkci 
>> range() a pod tímto jménem
>> se podstrčí xrange(). Funguje to ale jenom v daném
>> (lokálním) prostoru jmen.
>>
>> Aby budoucí verze Pythonu neznemožnila používání
>> starších programů, které používají xrange(), může
>> provést něco takového (trochu chytřeji):
>>
>> def xrange():
>>     # print 'Varovani...'
>>     return range()
>>
>> To znamená, že všude, kde budu používat
>> (v té době již nepodporovanou) funkci xrange(),
>> bude potichu nahrazena použitím nové range().
>> Jakmile to bude aktuální, dá se najevo
>> změna trochu hlasitěji (naznačeno zakomentovaným
>> printem).
>>
>> Petr
>
> hello
> Ted sem nasel v knize Zaciname programovat v jazyce Python vydane CP ze
> rozdil xrange a range je .... range tvori seznam a xrange ne ale pri 
> tom je xrange silne pomalejsi ...
>
> ahoj
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
Ano, já tu knížku mám taky a taky jsem to zrovna četl. Z toho ovšem 
vyplývá, že pokud v hypotetické verzi Python 3.0 by chtěli udělat tu 
šarádu, tedy zrušit range a xrange přejmenovat na range, tak by do toho 
mohli jít jedině v tom případě, že by současnou xrange výrazně 
zrychlili. No a také z toho plyne, že pro seznamy, o kterých vím, jak 
jsou velké a o kterých vím, že nebudou nikdy mít miliony prvků, nemá 
smysl xrange používat. Nutno ale také podotknout, že já to ve své 
aplikaci zkoušel přehodit tam i zpět a žádné výkonostní výkyvy ani na 
jednu stranu jsem pouhým okem nezpozoroval. Takže ono asi také záleží na 
tom, co programuji a jestli je pro mne ten výkonostní rozdíl tak důležitý.

Ivo

-- 
Ing. Ivo Štolpa

***********************************************
PUSSA software, Žižkova 13, 58601 Jihlava
e-mail: pussa na pussa.cz, ivo.stolpa na seznam.cz
stránky: http://www.pussa.cz
mobilní telefon: 602 735 124
pevná linka: 567 320 386
fax: 602 783 071
***********************************************





Další informace o konferenci Python