Assignment Condition in Python While Loop
Use break:
while True: i = sys.stdin.read(1) if i == "\n": break # etc...
Starting Python 3.8
, and the introduction of assignment expressions (PEP 572) (:=
operator), it's now possible to capture an expression value (here sys.stdin.read(1)
) as a variable in order to use it within the body of while
:
while (i := sys.stdin.read(1)) != '\n': do_smthg(i)
This:
- Assigns
sys.stdin.read(1)
to a variablei
- Compares
i
to\n
- If the condition is validated, enters the
while
body in whichi
can be used
You can accomplish this using the built-in function iter()
using the two-argument call method:
import functoolsfor i in iter(fuctools.partial(sys.stdin.read, 1), '\n'): ...
Documentation for this:
iter(o[, sentinel])
...
If the second argument, sentinel, is given, then o must be a callable object. The iterator created in this case will call o with no arguments for each call to itsnext()
method; if the value returned is equal to sentinel,StopIteration
will be raised, otherwise the value will be returned.One useful application of the second form of
iter()
is to read lines of a file until a certain line is reached. The following example reads a file until thereadline()
method returns an empty string:
with open('mydata.txt') as fp: for line in iter(fp.readline, ''): process_line(line)