On Thu, Jul 3, 2008 at 10:06 AM, Stavros Korokithakis <<a href="mailto:stavros@korokithakis.net">stavros@korokithakis.net</a>> wrote:<br><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hello all,<br>
I have noticed that sometimes "while" loops produce "unpythonic" patterns, such as the following:<br>
<br>
data = my_file.read(1024)<br>
while data:<br>
    do_something(data)<br>
    data = my_file.read(1024)<br>
<br>
The assignment is repeated, which is less than optimal. Since we don't have a while statement that does the check in the end, would it not be better if the syntax of while could be amended to  include something like this (in the spirit of the new "with" keyword)?:<br>

<br>
while my_file.read(1024) as data:<br>
   do_something(data)<br>
<br>
This would terminate the loop when myfile.read() evaluated to False, and it is more pythonic than repeating onesself.</blockquote><div><br><br>There is already an idiom for this, although admittedly not obvious or well-known:<br>
<br>
for data in iter(lambda: my_file.read(1024), ''):<br>    do_something(data)<br><br>or in 2.5+:<br><br>from functools import partial<br>for data in iter(partial(my_file.read,1024), ''):<br><div>
    do_something(data)<br>
<br>George</div></div></div>