[python] for + eval()

Petr Prikryl PrikrylP na skil.cz
Čtvrtek Prosinec 22 13:07:42 CET 2005


Už to možná trochu chápu.
Když to formuluji jinak, tak
vlastně ani nevím, kdy a kolikrát
se má provést to tělo cyklu.
Bude to předepsáno zvenku, řetězcem.

Zjednoduším případ s objects na řetězec,
jedním objektem bude znak a do data
se bude přidávat něco jiného.

Natvrdo tedy můžu napsat a spustit (a.py)
----------------------------------
objects = 'abcd'
data = []              

for x in xrange(1, 5):
    for object in objects:
        data.append((x, object))

for d in data:
    print d
----------------------------------

Výsledek bude vypadat takto:

(1, 'a')
(1, 'b')
(1, 'c')
(1, 'd')
(2, 'a')
(2, 'b')
(2, 'c')
(2, 'd')
(3, 'a')
(3, 'b')
(3, 'c')
(3, 'd')
(4, 'a')
(4, 'b')
(4, 'c')
(4, 'd')

Druhé řešení spočívá v tom, že tělo
cyklu nadefinuji do podoby funkce.
Příkazem exec pak provedu nějaký 
zkonstruovaný příkaz, ve kterém se 
bude vyskytovat volání této funkce:

(a2.py)
----------------------------------
objects = 'abcd'
data = []              

def f(objects):
    for object in objects:
        data.append((x, object))

sss = 'x in xrange(1, 5)'
exec ("for %s: f(objects)" % sss)

for d in data:
    print d
----------------------------------

Výsledek je stejný, jako v předchozím 
případě.

pepr

> Mělo by to vypadat napr. takhle:
> 
> data = []              
> for x in range (1,5):
>    for sub_object in object.kids:
>        data.append(parsetag(self,sub_object))
> 
> Je to jen vytazek z kodu.



Další informace o konferenci Python