[python] jmeno pro [neco for neco] (bylo nechtene propojeni mnozin)

Petr Přikryl prikryl na atlas.cz
Středa Říjen 20 09:32:38 CEST 2010


 MICHÁLEK Jan Mgr. napsal
 >
 > [...]
 > 
 > Jde tedy to nějak vymyslet, abych udělal ten generátor, kterej si bude pamatovat 
> jen aktuální hodnoty x a y, aniž bych musel použít smyčku?? 

> Ta věc [něco for něco] (menuje se to generátor pole??) 
 
Anglicky se to jmenuje "list comprehension", čili "skládač seznamu".
V překladu Dive Into Python 3 jsem ve spolupráci se zdejšími borci dospěl
k českému...

5.3 GENERÁTOROVÁ NOTACE SEZNAMU
Generátorová notace seznamu (anglicky list comprehension [list
komprihenšn]) umožňuje stručný zápis vytvoření seznamu z jiného
seznamu aplikováním funkce na všechny prvky zdrojového seznamu.
(Poznámka překladatele: Pojem „list comprehension“ je znám z
deklarativních jazyků a má charakter syntaktické konstrukce. V jazyce
Python se „vnitřku“ deklarativního zápisu podobá generátorový výraz.
Tímto způsobem byl odvozen český pojem „generátorová notace“.
Někdy je pojem „list comprehension“ použit v procedurálním,
dynamickém smyslu. V takové situaci můžeme uvažovat o pojmu
„generátor seznamu“. Pokud se bavíme o jeho výsledku, můžeme
uvažovat i o pojmu „generovaný seznam“. Vzhledem k tomu, že
zavedený český pojem pro tuto konstrukci asi neexistuje —
studentům příslušných oborů vysokých škol přijde po krátké 
chvíli anglický pojem srozumitelný —, budu volněji
používat některou z uvedených variant. Někdy budu poněkud 
dlouhý pojem „generátorová notace seznamu“
zkracovat. Kritériem volby bude dobrá srozumitelnost.)

Podobně existuje "dictionary comprehension" a "set comprehension".

> Nebo to jde nějak občůrat (například použít místo range() generátor)??

Už jsem to posílal jako reakci na odpověď Jirky, ale ono Ctrl-V zase tolik
práce nedá ;)

g = ((a,b) for a in xrange(1,10,2) for b in xrange(5,20,5))

def genFunc(x, y):
    for a in xrange(1, x, 2):
        for b in xrange(5, y, 5):
            yield (a, b)
            
for t in g:
    print t,
    
print    
print '-' * 60

for t in genFunc(10, 20):
    print t,


Petr


------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20101020/8c4c569f/attachment.html>


Další informace o konferenci Python