Re: how to get a reference to the __main__ module

2010-06-13 Thread Aahz
In article hun8s4$h4...@news.albasani.net, WH  whz...@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 (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
-- 
http://mail.python.org/mailman/listinfo/python-list


how to get a reference to the __main__ module

2010-06-08 Thread WH
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
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: how to get a reference to the __main__ module

2010-06-08 Thread Chris Rebert
On Tue, Jun 8, 2010 at 10:29 PM, WH whz...@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
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: how to get a reference to the __main__ module

2010-06-08 Thread Steven D'Aprano
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
-- 
http://mail.python.org/mailman/listinfo/python-list