[Python-Dev] Extended Function syntax

Alex Martelli aleax@aleax.it
Sun, 2 Feb 2003 23:22:51 +0100


On Sunday 02 February 2003 11:04 pm, Samuele Pedroni wrote:
> With Guido's 'do': [notice that count is rebindable in the thunk]
>
> class iterclose:
>   def __init__(self,iterwclose):
>      self.iter = iterwclose
>
>   def __call__(self,thunk):
>      try:
>        for x in self.iter:
>          thunk(x)
>      finally:
>        self.iter.close()
>
> count = 0
> do iterclose(open('blah.txt')): (line):
>    if line.find('Python') >=0:
>      count += 1
>      print line,

OK -- I *don't* get that " (line):" part, and how calling thunk() in
iterclose.__init__ binds/rebinds the local (?) variable line of the thunk. 
Looks like black magic to me.  Guess I must just be a bit thick 
tonight -- sorry.

> class autoclose2:
>   def __init__(self,file):
>     self.file = file
>
>   def __call__(self,thunk):
>       try:
>         thunk()
>       finally:
>         self.file.close()
>
> count = 0
> myfile = open('blah.txt')
> do autoclose2(open('blah.txt')):
>    for line in myfile:
>      if line.find('Python') >=0:
>        count += 1
>        print line,

shouldn't that be "do autoclose2(myfile):" ?  or is there some
even-blacker magic in this "do" business that I don't get...?


Alex