[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