Je suis en train de la fonction d'envoi de générateur, je m'y attendais send changera la valeur qui est en cours de rendement, alors j'ai essayé en ipython:Python "send" méthode ne modifie pas la valeur de "next"?
In [17]: def z(n):
...: i=0
...: while(i<n):
...: val=yield i
...: print "value is:",val
...: i+=1
...:
In [24]: z1=z(10)
In [25]: z1.next()
Out[25]: 0
In [26]: z1.send(5) # I was expecting that after "send", output value will become "5"
value is: 5
Out[26]: 1
In [27]: z1.next()
value is: None # I was expecting that z1.next() will restart from "6" because I sent "5"
Out[27]: 2
Eh bien, je suppose que j'avais mal comprendre vraiment ce que « envoyer » ne , comment le corriger?
Si j'utilise simplement z1.next(), il imprime des nombres; lors de l'utilisation de "print z1.next()", l'instruction "value is" apparaît. Pourquoi? – Troskyvs
@Troskyvs Mis à jour répondre un peu, j'espère que cela répond à votre question. – niemmi
Merci, j'ai commencé à comprendre votre point, à l'intérieur du générateur le "val = yield i" signifie que val est mis à partir de la commande "send" externe, tandis que l'appelant externe obtient la valeur de retour de "yield i". C'est vraiment difficile de comprendre pourquoi "next()" est égal à "send (None)" et donc val est "None". – Troskyvs