<br />
MICHÁLEK Jan Mgr. napsal<br />
><br />
> [...]<br />
> <br />
> Jde tedy to nějak vymyslet, abych udělal ten generátor, kterej si bude pamatovat <br />
> jen aktuální hodnoty x a y, aniž bych musel použít smyčku?? <br />
<br />
> Ta věc [něco for něco] (menuje se to generátor pole??) <br />
<br />
Anglicky se to jmenuje "list comprehension", čili "skládač seznamu".<br />
V překladu Dive Into Python 3 jsem ve spolupráci se zdejšími borci dospěl<br />
k českému...<br />
<br />
<font color="#993300">5.3 GENERÁTOROVÁ NOTACE SEZNAMU<br />
Generátorová notace seznamu (anglicky list comprehension [list<br />
komprihenšn]) umožňuje stručný zápis vytvoření seznamu z jiného<br />
seznamu aplikováním funkce na všechny prvky zdrojového seznamu.<br />
(Poznámka překladatele: Pojem „list comprehension“ je znám z<br />
deklarativních jazyků a má charakter syntaktické konstrukce. V jazyce<br />
Python se „vnitřku“ deklarativního zápisu podobá generátorový výraz.<br />
Tímto způsobem byl odvozen český pojem „generátorová notace“.<br />
Někdy je pojem „list comprehension“ použit v procedurálním,<br />
dynamickém smyslu. V takové situaci můžeme uvažovat o pojmu<br />
„generátor seznamu“. Pokud se bavíme o jeho výsledku, můžeme<br />
uvažovat i o pojmu „generovaný seznam“. Vzhledem k tomu, že<br />
zavedený český pojem pro tuto konstrukci asi neexistuje —<br />
studentům příslušných oborů vysokých škol přijde po krátké <br />
chvíli anglický pojem srozumitelný —, budu volněji<br />
používat některou z uvedených variant. Někdy budu poněkud <br />
dlouhý pojem „generátorová notace seznamu“<br />
zkracovat. Kritériem volby bude dobrá srozumitelnost.)<br />
</font><br />
Podobně existuje "dictionary comprehension" a "set comprehension".<br />
<br />
> Nebo to jde nějak občůrat (například použít místo range() generátor)??<br />
<br />
Už jsem to posílal jako reakci na odpověď Jirky, ale ono Ctrl-V zase tolik<br />
práce nedá ;)<br />
<br />
g = ((a,b) for a in xrange(1,10,2) for b in xrange(5,20,5))<br />
<br />
def genFunc(x, y):<br />
for a in xrange(1, x, 2):<br />
for b in xrange(5, y, 5):<br />
yield (a, b)<br />
<br />
for t in g:<br />
print t,<br />
<br />
print <br />
print '-' * 60<br />
<br />
for t in genFunc(10, 20):<br />
print t,<br />
<br />
<br />
Petr<br />
<br />