Module (6%)
Section (38%)

Как построить свой собственный генератор

Что если Вам нужен генератор для получения первых n степеней 2?

Нет ничего проще. Просто посмотрите на код ниже.

def powers_of_2(n): power = 1 for i in range(n): yield power power *= 2 for v in powers_of_2(8): print(v)

Можете угадать вывод? Запустите код, чтобы проверить свои догадки.


Составление списков

Генераторы также могут использоваться в списках, как здесь:

def powersOf2(n): pow = 1 for i in range(n): yield pow pow *= 2 t = [x for x in powersOf2(5)] print(t)

Запустите пример и проверьте вывод.


Функция list() может переделать серию последовательных выходов генератора а реальный список:

def powers_of_2(n): power = 1 for i in range(n): yield power power *= 2 t = list(powers_of_2(3)) print(t)

Снова попытайтесь предсказать вывод и запустите код, чтобы проверить Ваши прогнозы.


Кроме того, контекст, созданный оператором in, также позволяет использовать генератор.

В примере показано, как это сделать:

def powers_of_2(n): power = 1 for i in range(n): yield power power *= 2 for i in range(20): if i in powers_of_2(4): print(i)

Каков вывод кода? Запустите программу и проверьте.


Теперь давайте посмотрим на генератор чисел Фибоначчи и убедимся, что он выглядит намного лучше, чем объектная версия, основанная на реализации протокола прямого итератора.

Вот он:

def fibonacci(n): p = pp = 1 for i in range(n): if i in [0, 1]: yield 1 else: n = p + pp pp, p = p, n yield n fibs = list(fibonacci(10)) print(fibs)

Угадайте вывод (список), созданный генератором, и запустите код, чтобы проверить, были ли Вы правы.



Code

{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×