doza_and
Да похоже автору стримов хочется
Можно обобщить функцию-генератор через интерфейс потока.
>>> def g(stream):
... state = 'wait_digit'
... accumulator = ''
... while True:
... ch = stream.read(1)
... if not ch:
... break
... if state == 'wait_digit':
... if ch.isdigit():
... accumulator += ch
... state = 'wait_nondigit'
... elif state == 'wait_nondigit':
... if ch.isdigit():
... accumulator += ch
... else:
... number = int(accumulator)
... accumulator = ''
... yield number
... state = 'wait_digit'
...
>>>
>>> import sys
>>>
>>> numbers = g(sys.stdin)
>>>
>>> next(numbers)
111 222 333 x 444
111
>>> next(numbers)
222
>>> next(numbers)
333
>>> next(numbers)
444
>>> next(numbers)
555
555
>>> next(numbers)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
>>>
>>> import io
>>>
>>> numbers = g(io.StringIO(' 11 22 33 x 44 x 55 '))
>>>
>>> next(numbers)
11
>>> next(numbers)
22
>>> next(numbers)
33
>>> next(numbers)
44
>>> next(numbers)
55
>>> next(numbers)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>