Не только это одиночный строка кода, это то, что линия выполняется многократно, с различными значениями n
.
В принципе, it
- это итератор, который дает простые простые числа кандидатов, которые еще не были исключены ситом. Вы начинаете с того, что делаете все нечетные числа кандидатами.
it = _odd_iter()
Тогда вы повторно взять первый оставшийся кандидат,
while True:
n = next(it)
удалить все числа, кратные этого кандидата,
filter(_not_divisible(n), it)
и заменить кандидатов простых чисел со всем, что осталось после удаления кратных.
it = ...
Если вы претендуете filter
возвращает список чисел, а не итератора, а также делать вид _odd_iter()
возвращает список нечетных чисел вместо итератора, можно проследить через петлю и определить, что в списке на каждый пункт.Например, после запуска
it = _odd_iter()
начать с
it = 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, ...
Затем запустите
n = next(it) # 3
который вытягивает первый элемент с передней, оставив вас с
it = 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, ...
и запустить
it = filter(_not_divisible(3), it)
отфильтровывает все кратные 3,
it = 5, 7, 11, 13, 17, 19, 23, 25, ...
Затем вернитесь к началу цикла и тянуть новый первый номер с переднего
n = next(it) # 5
оставляя
it = 7, 11, 13, 17, 19, 23, 25, ...
, а затем отфильтровать все кратные 5,
it = filter(_not_divisible(5), it)
который дает
it = 7, 11, 13, 17, 19, 23, ...
и так далее.
На практике, поскольку filter()
возвращает итератор, а не список, вы завершаете получение вложенной последовательности итераторов. В частности, вы начинаете с
it = _odd_iter()
затем после первой итерации цикла, то есть в основном
it = filter(_non_divisible(3), _odd_iter())
за исключением того, что 3
была взята из итератора, а затем, после второй итерации петля у вас есть
it = filter(_non_divisible(5), filter(_non_divisible(3), _odd_iter()))
за исключением того, что 5
также были взяты из итератора, а затем
it = filter(_non_divisible(7), filter(_non_divisible(5), filter(_non_divisible(3), _odd_iter())))
и так далее.
вы знакомы с decorato RS? Это будет намного проще объяснить с помощью этой концепции. – Marat
Я знаю, как работает декоратор, не могли бы вы объяснить его подробно? – bresai