----- "Steven D'Aprano" <ste...@remove.this.cybersource.com.au> wrote:

> On Mon, 27 Apr 2009 21:46:13 -0400, Gary Oberbrunner wrote:
> 
> > ...Now after importing foo.bar, I'd like to load
> > another file of code (say xyz.py), but *into* foo.bar's namespace. 
...
> 
> import foo.bar
> import xyz
> for name in dir(xyz):
>     if not name.starts_with('_'):
>         setattr(foo.bar, name, getattr(xyz, name))
> del xyz

Hi Steven (and MRAB), thanks for this idea.  This looks pretty straightforward 
and useful.  I also heard of another way via googling around; see what you 
think of this.  For example's sake this code just adds stuff to the os.path 
module (but I could pick any module not under my control).  For fun I have the 
code in a string rather than a file, but I think it works either way.

import sys
import os.path
 
f='''
def Foo(x):
  print "%s: Foo!"%x
Bar=123
'''

# now the magic two lines:
m=sys.modules['os.path']
exec f in m.__dict__ 

# test:
os.path.Foo("Gary")
print os.path.Bar

==== cut =================

What do you think?  Better or worse than looping over dir()?  Probably faster 
and less memory, certainly shorter, but on the other hand a lot more opaque (at 
least to me).

Comments welcome!

-- 
. . . . . . . . . . . . . . . . . . . . . . . . .
Gary Oberbrunner                ga...@genarts.com
GenArts, Inc.                   Tel: 617-492-2888
955 Mass. Ave                   Fax: 617-492-2852
Cambridge, MA 02139 USA         www.genarts.com 
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to