[Python-ideas] Yielding through context managers
Jan Kaliszewski
zuo at chopin.edu.pl
Fri Mar 30 21:39:38 CEST 2012
> >class cd(object):
> > def __init__(self, path):
> > self.inner_path = path
> >
> > def __enter__(self):
> > self.outer_path = os.getcwd()
> > os.chdir(self.inner_path)
> >
> > def __exit__(self, exc_type, exc_val, exc_tb):
> > os.chdir(self.outer_path)
> >
> > def __yield__(self):
> > self.inner_path = os.getcwd()
> > os.chdir(self.outer_path)
> >
> > def __send__(self):
> > self.outer_path = os.getcwd()
> > os.chdir(self.inner_path)
[snip]
> >def my_generator(path):
> > with cd(path):
> > yield do_something()
> > do_something_else()
Interesting idea, though doing this with present Python does not seem to
be very painful:
class cd(object):
def __init__(self, path):
self.inner_path = path
def __enter__(self):
self.outer_path = os.getcwd()
os.chdir(self.inner_path)
return self
def __exit__(self, exc_type, exc_val, exc_tb):
os.chdir(self.outer_path)
def my_generator(path):
with cd(path) as context:
output = do_something()
with cd(context.outer_path):
yield output
...
Cheers.
*j
More information about the Python-ideas
mailing list