[python] Diskuse: "Strucny seznam"
geon
geon na post.cz
Čtvrtek Říjen 6 16:13:54 CEST 2005
JO! TO JE VONO!
geon
P.S. Tvoje illustrační příklady si musím často tisknout, protože z
obrazovky se mi to hůře chápe :-). Díky za ně!
Petr Prikryl napsal(a):
>slacker
>
>
>>Tipoval bych, ze tuto vlastnost prevzal Python z
>>fukncionalnich programovacich jazyku. No a pokud
>>je mi znamo, tak se teto konstrukci vzdy rikalo
>>"generator seznamu". Takze termin "strucny seznam"
>>je asi opravdu trochu mimo.
>>
>>
>
>Super!
>
> Generátor seznamu
>
>Nemám sice dobré znalosti z funkcionálních jazyků
>a přístup, který je použit v Pythonu, nepovažuji
>za výlučně funkcionální, nicméně jsem měl na mysli
>naprosto stejný překlad. Moje zdůvodnění vychází
>přímo z vlastností Pythonu (generátory) a z obecného
>principu v programovacích jazycích (konstruktor):
>
>1. Syntaktický zápis (případně prázdné)
> posloupnosti v hranatých závorkách je speciální
> formou konstruktoru seznamu. Vzniká nový objekt
> typu seznam a má určenou počáteční hodnotu.
> (Zatím bez souvislosti s list comprehension,
> podobně, jako se například apostrofům v Pascalu
> říká konstruktor řetězce.)
>
> lst1 = []
> lst2 = [ 1, 2, 3 ]
>
>2. Vnitřek u list comprehension je čistokrevný
> "generator expression" (viz 5.2.5 Generator
> expressions), což je jen jiný zápis obecného
> generátoru. Výsledkem je objekt generátoru.
> Odkaz na něj má vlastnosti iterátoru (podporuje
> metodu next()).
>
>3. Dohromady je to konstruktor seznamu krmený
> generátorem položek, tedy "generátor seznamu".
>
>
>Ilustrační příklady
>===================
>
>Nejdříve výsledek list comprehension:
>
> >>> lst = [ x for x in xrange(10) ]
> >>> lst
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>
>Vnitřní "generator expression" použitý jako obecný
>generátor:
>
> >>> g = (x for x in xrange(10))
> >>> g
> <generator object at 0x00928080>
> >>> for i in g:
> ... print i
> ...
> 0
> 1
> 2
> 3
> 4
> 5
> 6
> 7
> 8
> 9
> >>> g.next()
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> StopIteration
>
>Konstrukci seznamu můžeme provést pomocí právě
>takového generátoru:
>
> >>> g = (x for x in xrange(10))
> >>> lst = list(g)
> >>> lst
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>
>Když to zapíšeme bez pomocné refrence g,
>dostaneme:
>
> >>> lst = list((x for x in xrange(10)))
> >>> lst
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>
>Když 'list((' nahradíme '[' a '))' nahradíme ']',
>dostaneme přesně "list comprehension". Jde
>pravděpodobně jen o syntakticky jinou formu zápisu
>téhož.
>
>pepr
>_______________________________________________
>Python mailing list
>Python na py.cz
>http://www.py.cz/mailman/listinfo/python
>
>
>
>
Další informace o konferenci Python