Краткий ответ: в Python нет способа встроенного назначения переменных в цикле while. Это означает, что я не могу сказать:
while x=next():
// do something here!
Поскольку это невозможно, существует ряд «идиоматически правильных» способов сделать это:
while 1:
x = next()
if x != END:
// Blah
else:
break
Очевидно, это немного уродливо. Вы также можете использовать один из «итераторных» подходов, перечисленных выше, но, опять же, это может быть не идеально. Наконец, вы можете использовать подход «pita pocket», который я только что нашел, когда гуглил:
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
Теперь вы можете сделать:
p = Pita()
while p( next() ) != END:
// do stuff with p.pocket!
Спасибо за этот вопрос; узнать о __call__
идиоме было действительно здорово! :)
РЕДАКТИРОВАТЬ: Я хотел бы дать кредит, когда кредит должен. Идиома «карманный лаваш» была найдена здесь