réponse courte: il n'y a pas moyen de faire variabl en ligne e affectation dans une boucle while en Python. Ce qui signifie que je ne peux pas dire:
while x=next():
// do something here!
Depuis ce n'est pas possible, il y a un certain nombre de « idiomatiquement corriger » façons de le faire:
while 1:
x = next()
if x != END:
// Blah
else:
break
De toute évidence, cela est une sorte de laid. Vous pouvez également utiliser l'une des approches «itérateur» énumérées ci-dessus, mais, encore une fois, cela peut ne pas être idéal. Enfin, vous pouvez utiliser l'approche « poche pita » que je viens de trouver en fait tout googler:
class Pita(object):
__slots__ = ('pocket',)
marker = object()
def __init__(self, v=marker):
if v is not self.marker:
self.pocket = v
def __call__(self, v=marker):
if v is not self.marker:
self.pocket = v
return self.pocket
Maintenant vous pouvez faire:
p = Pita()
while p(next()) != END:
// do stuff with p.pocket!
Merci pour cette question; apprendre sur le __call__
idiome était vraiment cool! :)
EDIT: Je voudrais donner un crédit lorsque le crédit est dû. L'idiome «poche de pita» a été trouvé here
J'ai posté votre réponse comme réponse à cette question pour permettre de voter dessus. – jfs