[python] dokumentace k novejsim rysum jazyka

Jirka Vejrazka jirka.vejrazka na gmail.com
Pátek Březen 5 01:01:40 CET 2010


> čili se to chová jinak než standardní tuple, je to spíš něco, čemu se říká generátor.

Nojo, vida - to jsem nevedel, ze s kulatymi zavorkami to vytvori
generator, diky :)

Generator ma tu vyhodu, ze se nic nevytvari v pameti. Zrejme je to,
kdyz se pouzije misto range (ktery interne dela list) funkce xrange
(coz je taky generator) - tohle plati pro Python 2.4 ktery ted mam
spusteny, v novejsich uz je to mozna jinak)

>>> a = [x for x in xrange(100000000)]  # vytvori v pameti list, ktery ma 100 milionu prvku (bude chvili trvat)
>>> a = (x for x in xrange(100000000)]  # bleskove vytvori generator, ktery po zavolani a.next() najde a vrati "dalsi prvek v poradi"

>>>> b=(1,2,3)
>>>> b.next()
> Traceback (most recent call last):
>  File "<stdin>", line 1, in <module>
> AttributeError: 'tuple' object has no attribute 'next'

Tohle uz je logicke, to je normalni tuple.

> Mně se takové věci celkem líbí, ale připadne mně to nějak nedomyšlené,
> protože by celý ten generátor měl tvořit samostatnou syntaktickou
> jednotku, tj. interpret by měl nějak sežrat zápis
>
>>>> i*i for i in range(10)

Proc, tady nejsou okolo zavorky, je to syntakticky neco uplne jineho...

Klasicky priklad, ukazujici za na detailech zalezi:
>>> x = (1)   # cislo jedne v jednech zbytecnych zavorkach
>>> x
1
>>> x = (1,)  # tuple s jednim prvkem
>>> x
(1,)

  Jirka


Další informace o konferenci Python