Итератори и генератори

„ Програмиране с Python“, ФМИ

11.03.2010

Програма

Цар, мустаци, градове, сума на прости числа, случайни хора

Итератор

f = open('cities')
next(f)
for line in f:
    print(line)

 

favori

Генератори

def biscuits(pack):
    pack.open()
    while not pack.empty():
        biscuit = pack.take_out()
        yield biscuit

for biscuit in biscuits(favori):
    if biscuit.examine():
        biscuit.eat()
    else:
        biscuit.throw_away()

Прости числа с генератор

def primes(limit, number_modifier=None):
    if number_modifier is None: number_modifier = lambda x: x
    for number in range(2, limit + 1):
        if all([number % divisor for divisor in range(2, number)]):
            yield number_modifier(number)

Играчка

p = primes(10, lambda x: x + 1)
next(p)
for prime in p:
    print(prime)
list(p)
list(primes(10, lambda x: x + 1))

Generator expressions


primes = [number for number in range(100) if all([number % divisor for divisor in range(2, number)])]

primes = (number for number in range(100) if all(number % divisor for divisor in range(2, number)))

def primes(limit, number_modifier=None):
    if number_modifier is None: number_modifier = lambda x: x
    for number in range(2, limit + 1):
        if all((number % divisor for divisor in range(2, number))):
            yield number_modifier(number)

вградени функции

Още въпроси?