Looping [was Re: Python and the need for speed]
Christian Gollwitzer
auriocus at gmx.de
Tue Apr 18 03:20:43 EDT 2017
Am 18.04.17 um 08:21 schrieb Chris Angelico:
> On Tue, Apr 18, 2017 at 4:06 PM, Christian Gollwitzer <auriocus at gmx.de> wrote:
>> Am 18.04.17 um 02:18 schrieb Ben Bacarisse:
>>
>>> Thanks (and to Grant). IO seems to be the canonical example. Where
>>> some languages would force one to write
>>>
>>> c = sys.stdin.read(1)
>>> while c == ' ':
>>> c = sys.stdin.read(1)
>>
>> repeat
>> c = sys.stdin.read(1)
>> until c != ' '
>
> Except that there's processing code after it.
>
Sorry, I misread it then - Ben's code did NOT have it, it looks like a
"skip the whitespace" loop.
> while True:
> c = sys.stdin.read(1)
> if not c: break
> if c.isprintable(): text += c
> elif c == "\x08": text = text[:-1]
> # etc
>
> Can you write _that_ as a do-while?
No. This case OTOH looks like an iteration to me and it would be most
logical to write
for c in sys.stdin:
if c.isprintable(): text += c
elif c == "\x08": text = text[:-1]
# etc
except that this iterates over lines. Is there an analogous iterator for
chars? For "lines" terminated by something else than "\n"?
"for c in get_chars(sys.stdin)" and
"for c in get_string(sys.stdin, terminate=':')" would be nicely readable
IMHO. Or AWK-like processing:
for fields in get_fields(open('/etc/passwd'), RS='\n', FS=':'):
if fields[2]=='0':
print 'Super-User found:', fields[0]
Christian
More information about the Python-list
mailing list