[python] Deferred output
Jan Fuchs
fuky na sunstel.asu.cas.cz
Čtvrtek Únor 11 04:07:22 CET 2010
Zdravím,
ještě doplním Petrův mail. Myslím, že pro pochopení je šikovné spustit si
ipython, nejasné části kódu vyzkoušet a poté se to snažit pochopit jako celek.
from itertools import islice, tee, chain
def fibonacci():
# vraci generator object
# napr. pro output = [0, 1, 2] bude generator obsahovat polozky 0 az 2
def deferred_output():
for i in output:
yield i
# fce tee() prijima jako prvni argument iterable object a
# jako druhy argument pocet nezavislych iteratoru, ktere vrati jako tuple
# tj. result, c1, c2 maji stejny obsah tj. to co vraci deferred_output()
result, c1, c2 = tee(deferred_output(), 3)
# fce map() spusti fci add(), ktere postupne predava jako prvni argument
# polozky z prvniho iteratoru a jako druhy argument polozky z druheho
# iteratoru, vraci pole s vysledky fce map()
#
# fce islice() prijme iterator c2 a vrati iterator, ktery obsahuje jeho
# polozky od 1 do konce
paired = map(add, c1, islice(c2, 1, None))
# fce chain() spoji predane iteratory a vrati je jako jeden
output = chain([0, 1], paired)
return result
print(list(islice(fibonacci(), 50)))
S pozdravem Jan Fuchs
--
/**************************************************************
* _ Žádný program není bezchybný, dokonalý ani nejlepší, *
* °v° to samé platí i o lidech a nejen o nich. *
* /(_)\ -- Jan Fuchs -- *
* ^ ^ *
* http://www.fuky.org Jabber: jan.fuchs.cz na gmail.com *
**************************************************************/
Další informace o konferenci Python