ich Generator in Python lerne, hier die Funktionen:Was aus diesen beiden Funktionen sind anders in Python mit schicken
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
wenn die Funktion send mit:
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
wenn die „a verwendet. send (1) "und" b.send (1) "wiederholt a.send (1) den größeren Wert, aber b.send (1) gibt immer noch denselben Wert zurück. Warum gibt es einen Unterschied?
ich überprüfen die Bedeutung von Sendefunktion:
Fortsetzung der Ausführung und `` sendet ‚‘ einen Wert in die Generatorfunktion. Das Wertargument wird das Ergebnis der aktuellen Yieldexpression. Die send() -Methode gibt den nächsten vom Generator zurückgegebenen Wert zurück oder löst StopIteration aus, wenn der Generator beendet wird, ohne einen anderen Wert zu liefern. Wenn send() aufgerufen wird, um den Generator zu starten, muss er mit None als Argument aufgerufen werden, da es keinen Yield-Ausdruck gibt, der den Wert empfangen könnte.
Hat Ihr Beispiel nicht genau zeigen, was Sie fragen? Die Sache, die anders ist, ist die Sache, die anders ist! * ".send" hat nur dann einen Effekt, wenn Sie das Ergebnis der "Ausbeute" zuweisen, wie Sie es in "get_primes2" tun. Wenn Sie ".send (None)" auswählen, wird es auf beide Arten ignoriert. – jonrsharpe
ich denke, "send (x)" und x wird an die get_primes1() gesendet und wieder ergeben ... @ jonrsharpe –
Es ist nicht klar, was Ihre Frage ist. – jonrsharpe