Пожалуйста, подумайте Python 3 код для генерации простых чисел, используя неограниченное решето Эратосфена:фильтр Python3 с лямбда-функции и генератор
import itertools
def primes():
numbers = itertools.count(2)
while True:
prime = next(numbers)
yield prime
numbers = filter(prime.__rmod__,numbers)
prime_gen = primes()
next(prime_gen)
# Prints 2
next(prime_gen)
# Prints 3
next(prime_gen)
# Prints 5
next(prime_gen)
# Prints 7
До сих пор так хорошо. Теперь, давайте заменим функцию prime.__rmod__
с лямбда, который делает то же самое:
import itertools
def primes():
numbers = itertools.count(2)
while True:
prime = next(numbers)
yield prime
numbers = filter(lambda n: n % prime,numbers)
prime_gen = primes()
next(prime_gen)
# Prints 2
next(prime_gen)
# Prints 3
next(prime_gen)
# Prints 4
next(prime_gen)
# Prints 5
Почему лямбда-функция не работает с фильтром? Что-то происходит в области лямбда-функции?
да, посмотрите на [этот вопрос] (http://stackoverflow.com/questions/938429/scope-of-python-lambda-functions-and-their-parameters) для получения дополнительной информации о том, почему это так. –