Jim wrote: > 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'.
Instead of "return None", consider using "return for refund" ;-) > 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. Looks like it *was* a trialling problem, with weird residual effects. The point was that it's a very strange practice to (a) name the executable "python25.exe" [standard installation would produce C:\Python25\python.exe] (b) want/need to use ".exe" when invoking it. > > 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. Most other people think that that's a very nice idea too; there was just no clue in your original posting about what you were really trying to do. > 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. So what about my suggestion 3? I got the impression from your reply to Bjoern that it was a good fit for your case. The functions are in what we now know to be the user's script, and the app calls them. What problems? Cheers, John -- http://mail.python.org/mailman/listinfo/python-list