Skip to content

Latest commit

 

History

History
68 lines (46 loc) · 1.96 KB

File metadata and controls

68 lines (46 loc) · 1.96 KB

generátory

Na přednášce jsme ukázali, jak se v Pythonu používá generátor a iterátor.

Rozšiřující čtení k tématu je např stránka Improve Your Python: 'yield' and Generators Explained, která ukazuje i použití generátorů pro coroutines.

Vlastní generátor

Napište si vlastní generátor, který bude postupně vracet přirozená čísla (stejně jako itertools.count).

Zabalte ho do jiného generátoru square, který bude z prvního generátoru vybírat prvky a vrace jejich

Zkuste vypsat první 50 druhých mocnin generovaných generátorem.

def count(start=1, step=1):
    "Returns numbers starting from start with step step" 
    yield 2
    yield 3
    ...
    
def square(src):
    ...
    
    
# vypíše prvních 50 druhých mocnin    
squares = square(count())
for i in range(100):
    s = next(squares)
    print(s)
    
# alternativně (s použití enumerate())
for i,s in enumerate(square(count())):
    if i > 50: 
        break    
    print(s)

Vestavěné generátory/iterátory

Jako generátory se mohou chovat i řetězce a další objekty. Zkuste to na řetězci.

Kromě generátoru range() je v Pythonu spousta užitečných generátorů v modulu itertools. Je možné několik generátorů složit.

Zkuste v něm najít generátor, který z řetězců "ABCDEFGH" a "12345678" vygeneruje kódy všech políček na šachovnici.

Soubor jako generátor

I soubor se chová jako generátor. Otevřete textový soubor a vypište z něho všechny řádky, které nejsou prázdné a/nebo nezačínají mřízkou.

Jako bonus pak můžete zkusit použít použít coroutines podle odkazovaného článku.