[Python-Dev] Extended Function syntax
Alex Martelli
aleax@aleax.it
Sun, 2 Feb 2003 22:50:37 +0100
On Sunday 02 February 2003 10:41 pm, Brett Cannon wrote:
...
> > > with myfile = auto_closing_file('blah.txt', 'rb'):
> > > for line in myfile:
...
> So if someone (read: Guido and Samuele =) could implement a file that
> auto-closes once the iterator on the file is exhausted with each
> suggestion I would *really* appreciate it. And if there could even be
> code given that used what these things returned by searching each returned
> line for the word "Python" would be great as well. That way we not only
As I understood Samuele's "with" proposal (enhanced to allow assignment
in the with, and to make __enter__ optional):
class auto_closing_file(file):
__exit__ = file.close
with myfile = auto_closing_file('blah.txt'):
for line in myfile:
if line.find('Python')>=0:
print line,
If __enter__ were not optional, auto_closing_file would have to add one
boilerplate line defining it:
class auto_closing_file(file):
__exit__ = file.close
def __enter__(self): pass
Actually, it would seem sensible, if we added this 'with', to extent built-in
file by this tiny bit -- let it have __exit__ as a synonym of close (and if
needed __enter__ as a no-operation method) so it can be used directly
in what would then become a very common idiom:
with myfile = open('blah.txt'):
for line in myfile:
if line.find('Python')>=0:
print line,
I don't understand the 'do' concepts well enough to code to them, as
I have not followed this thread closely enough for this.
Alex