Я учусь генератор в питона, здесь функции:Что отличается от этих двух функций с помощью отправки в Python
import math
def is_primes(number):
if number > 1:
if number == 2:
return True
if number % 2 == 0:
return False
for current in range(3, int(math.sqrt(number) + 1), 2):
if number % current == 0:
return False
return True
return False
def get_primes1(number):
while True:
if is_primes(number):
yield number
number +=1
def get_primes2(number):
while True:
if is_primes(number):
number=yield number
number +=1
при использовании функции отправки:
a=get_primes1(2)
b=get_primes2(2)
a.send(None)#return 2
b.send(None)#return 2
a.send(1)#return 3,the parameter in send() looks useless.
b.send(1)#return 1,normal
при использовании «а. send (1) "и" b.send (1) "Повторно, a.send (1) возвращает большее значение, но b.send (1) все равно возвращает одно и то же значение.
я проверить значение функции отправки:
возобновляет выполнение и `` посылает «» значения в функцию генератора. Аргумент value становится результатом текущего вывода. Метод send() возвращает следующее значение, полученное генератором, или вызывает StopIteration, если генератор выходит, не давая другого значения. Когда send() вызывается для запуска генератора, он должен быть вызван с None как аргумент, потому что нет выражения yield, которое могло бы получить значение.
ли не ваш пример демонстрирует именно то, что вы спрашиваете? Вещь, которая отличается *, - это то, что отличается! * '.send' имеет эффект, если вы назначаете результат' yield', как и в 'get_primes2'. Если вы '.send (None)', это игнорируется в любом случае. – jonrsharpe
Я думаю, что «send (x)» и x будет отправлен на get_primes1() и снова уступят ... @ jonrsharpe –
Неясно, в чем ваш вопрос. – jonrsharpe