From: WH on 9 Jun 2010 01:29 Hi, I want to use one of two functions in a script: def func_one(): pass def func_two(): pass func = getattr(x, 'func_'+number) func() 'x' in getattr() should be a reference to the "__main__" module, right? How to get it? The 'if' clause should work here. I am just curious if we can use the above method. Thanks, -WH
From: Steven D'Aprano on 9 Jun 2010 01:41 On Tue, 08 Jun 2010 22:29:04 -0700, WH wrote: > Hi, > > I want to use one of two functions in a script: > > def func_one(): pass > def func_two(): pass > > func = getattr(x, 'func_'+number) > func() > > 'x' in getattr() should be a reference to the "__main__" module, right? > How to get it? # File test.py def func_one(): return "one = 1" def func_two(): return "two = 2" if __name__ == '__main__': import __main__ func = getattr(__main__, 'func_' + 'two') print func() import test print getattr(test, 'func_' + 'one')() which works, but importing yourself can be tricky. Try taking the "if __name__" test out and running the script and see what happens. This is probably a better way to solve your problem that doesn't rely on the module importing itself: def func_one(): return "one = 1" def func_two(): return "two = 2" funcs = {'one': func_one, 'two': func_two} print funcs['one'] -- Steven
From: Chris Rebert on 9 Jun 2010 01:42 On Tue, Jun 8, 2010 at 10:29 PM, WH <whzhao(a)gmail.com> wrote: > Hi, > > I want to use one of two functions in a script: > > def func_one(): pass > def func_two(): pass > > func = getattr(x, 'func_'+number) > func() > > 'x' in getattr() should be a reference to the "__main__" module, right? > Â How to get it? from sys import modules __main__ = modules["__main__"] # or call the variable whatever you want assert __main__.__dict__ is globals() # purely for pedagogy func = getattr(__main__, 'func_'+number) Of course, in your particular case, the code can be simplified to avoid getattr() altogether: func = globals()['func_'+number] Cheers, Chris -- http://blog.rebertia.com
From: Aahz on 13 Jun 2010 12:40 In article <hun8s4$h4l$1(a)news.albasani.net>, WH <whzhao(a)gmail.com> wrote: > >'x' in getattr() should be a reference to the "__main__" module, right? >How to get it? Just for the record, the best way to get a reference to __main__ is to import it: import __main__ -- Aahz (aahz(a)pythoncraft.com) <*> http://www.pythoncraft.com/ "If you don't know what your program is supposed to do, you'd better not start writing it." --Dijkstra
|
Pages: 1 Prev: updating NumPy in EPD Next: Python-list Digest, Vol 81, Issue 63 |