Pro Python 2.x by se to dalo ještě upravit (viz dole).

"Jirka Vejrazka" napsal
 > >  for i in [(a,b) for a in range(1,10,2) for b in range(5,20,5)]:
 > 
 > Kdyz tady pouzijes na krajich kulate zavorky misto hranatych, tak se
 > to nevyrobi cele v pameti, ale vznikne generator, ktery se pak da
 > pouzit uplne stejne pro "for" cyklus:
 > 
 > Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on 
 > win32
 > Type "help", "copyright", "credits" or "license" for more information.
 > 
 | >>> x = [(a,b) for a in range(1,10,2) for b in range(5,20,5)]
 | >>> x
 | [(1, 5), (1, 10), (1, 15), (3, 5), (3, 10), (3, 15), (5, 5), (5, 10), (5, 
15),
 | 
 | >>> x = ((a,b) for a in range(1,10,2) for b in range(5,20,5))
 | >>> x
 | 
 
a.py
======================================================
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,
======================================================
 
Místo range() použij xrange() -- i když tady ta úspora je maličká (jen z 
principu).
To je ten generátor přiřazený do g -- jak ukazoval Jirka.

Generátorová funkce genFunc vrátí stejný generátor. Je to jiné jen syntakticky.
Tady jsou navíc doplněny jen parametry, aby se to dalo použít pro různé hodnoty
x a y a nemuselo se to furt opisovat. Zavoláním genFunc vznikne podobný
generátor, jako g.  U mě to zobrazí následující:

======================================================
C:tmp>python a.py
(1, 5) (1, 10) (1, 15) (3, 5) (3, 10) (3, 15) (5, 5) (5, 10) (5, 15) (7, 5) (7, 
10) (7, 15) (9, 5) (9, 10) (9, 15)
------------------------------------------------------------
(1, 5) (1, 10) (1, 15) (3, 5) (3, 10) (3, 15) (5, 5) (5, 10) (5, 15) (7, 5) (7, 
10) (7, 15) (9, 5) (9, 10) (9, 15)
======================================================
 
Petr
_______________________________________________
Python mailing list
Python@py.cz
http://www.py.cz/mailman/listinfo/python

Odpovedet emailem