Generátory
Generátor je funkce, která si pamatuje všechny své proměnné i místo opuštění a při každém volání se vrací na původní místo a pokračuje, kde skončila (obyčejná funkce začíná při každém svém volání vždy na svém začátku). Opuštění funkce a předání nějaké hodnoty se děje pomocí yield. Typické použití je tvorba ID, jmen či sériových čísel.
Příklad:
def genID(pocatek=0): v = pocatek while v < pocatek + 1000: yield "ID_%05d" % v v += 1 return generator = genID() # vytvori generator for i in range(10): # generuje 10 hodnot print generator.next()
Generátorové výrazy
Generátorové výrazy jsou podobné generátorům seznamů s tím, že nevracejí seznam celý, ale prvek po prvku, podobně jako iterátory (IteratorIterable). Používá se hlavně pro dlouhé posloupnosti. Generátorové výrazy se uzavírají do obyčejných závorek, narozdíl od generátorů seznamů, které mají závorky hranaté.
Příklad:
import os seznamSouboruIter = (soubor for soubor in os.listdir(".") if os.path.isfile(soubor)) print seznamSouboruIter for soubor in seznamSouboruIter: print soubor
Generátory seznamu (list comprehensions)
Tvorba seznamů snad jednodušším způsobem. Příklad:
import os seznamSouboru = [soubor for soubor in os.listdir(".") if os.path.isfile(soubor)] print seznamSouboru # Klasicky by to bylo takhle: seznamSouboru=[] for soubor in os.listdir("."): if os.path.isfile(soubor): seznamSouboru.append(soubor) print seznamSouboru
Generátory seznamu --mol, Sat, 02 Jan 2010 15:57:40 +0100 reply
Ten příklad není IMHO nejšťastnější, protože existuje mnohem kratší řešení: seznamSouboru = filter(os.path.isfile, os.listdir('.'))