Условие присваивания в Python While Loop

В C можно сделать

while( (i=a) != b ) { }

, а в Python, похоже, нельзя.

while (i = sys.stdin.read(1)) != "\n":

генерирует

    while (i = sys.stdin.read(1)) != "\n":
         ^
SyntaxError: invalid syntax

( ^ должен быть на = )

Есть ли обходной путь?

28
задан tekknolagi 15 October 2011 в 22:12
поделиться

1 ответ

Вы можете сделать это, используя встроенную функцию 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)
9
ответ дан 28 November 2019 в 03:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: