В C можно сделать
while( (i=a) != b ) { }
, а в Python, похоже, нельзя.
while (i = sys.stdin.read(1)) != "\n":
генерирует
while (i = sys.stdin.read(1)) != "\n":
^
SyntaxError: invalid syntax
( ^
должен быть на =
)
Есть ли обходной путь?
Вы можете сделать это, используя встроенную функцию iter()
, используя метод вызова с двумя аргументами:
import functools
for i in iter(fuctools.partial(sys.stdin.read, 1), '\n'):
...
Документация для этого:
iter(o[, sentinel])
...
Если задан второй аргумент, часовой , то o должен быть вызываемым объектом. Созданный в этом случае итератор будет вызывать o без аргументов для каждого вызова его методаnext()
; если возвращаемое значение равно sentinel , будет увеличеноStopIteration
, в противном случае будет возвращено значение.Одним из полезных применений второй формы
iter()
является чтение строк файла, пока не будет достигнута определенная строка. Следующий пример читает файл, пока методreadline()
не вернёт пустую строку:
with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)