How do I access a main frunction from an import module?

Jim jscrerar at compuserve.com
Fri Nov 24 13:26:26 EST 2006


John Machin wrote:
> Jim wrote:
> > Hi,
> >
> > I have created an import module.  And would like to access a function
> > from the main script, e.g.,
> >
> > file abc.py:
> > ###################
> > def a():
> >     m()
> >     return None
> > ####################
> >
> > file main.py:
> > #####################
> > from abc import *
> > def m():
> >     print 'something'
> >     return None
> >
> > a()
> > ######################
> >
> > python25.exe main.py
> >
>
> Although there are literally correct answers to your question, the best
> answer is "Don't do that. You would be creating circular references
> between modules, and run the risk of emulating the mythical ooloo bird
> by disappearing up your own fundamental orifice". Some possible
> practical solutions:
>
> 1. Put the m function in a 3rd file/module. Then any other module which
> needs it can import/call.
>
> 2. If you think that's not a good idea, then put it in abc.py (it's not
> used in main.py in your example).
>
> 3. Maybe this will suit what you are really trying to do:
>
>  file abc.py:
>  ###################
>  def a(argfunc): # <<<<<=====
>      argfunc() # <<<<<=====
>  ####################
>
>  file main.py:
>  #####################
>  from abc import *
>  def m():
>      print 'something'
>
>  a(m) # <<<<<=====
>  ######################
>
> 4. If you think *that's* not a good idea, then you might like to
> explain at a higher level what you are *really* trying to achieve :-)
> E.g. "Function m is one of n functions in main.py of which abc.py
> may/must call 0, 1, or many because blah blah blah ..."
>
> BTW, "return None" at the very end of a function is redundant. The
> Python compiler generates "return None" automagically (implicitly!?)
> instead of letting you fall off the end of the world. Which book or
> tutorial are you using?
>
> BTW #2: "python25.exe main.py" ?? If you are on Windows, have Python
> 2.4 as your default setup, and are trialling 2.5: you may like to ask
> (in a new thread) about more convenient ways of doing it. Otherwise you
> might like to tell what you are up to (in a new thread) so that your
> problem can be diagnosed correctly and cured :-)
>
> HTH,
> John

BTW#1: I have most of the python books from O'Reilly.  I'm sure that
some of them say that its a good idea to use 'return None'.  However,
most their examples do not us it.  Anyway I find that its useful when
reading my own scripts.

BTW#2: I do not have Python 2.4 installed anymore.  Therefore, it is
not a trialling problem.

I thought that it would be NICE to keep the application and the user's
script separate from each other, being that python is so flexible.
However, there seems to be no end to the problems that occur by doing
this.  So I will abandon this exercise, since it appears not to be a
very good programming practise.

Thanks,
Jim




More information about the Python-list mailing list