Hello all, I'm trying to write a function that will dynamically generate other functions via exec. I then want to be able to import the file (module) containing this function and use it in other modules, but for some reason it only works using the "import <mod>" syntax, and not "from <mod> import *" syntax... i.e. in the latter case, the function is dynamically generated, but not accessible from the importing module. Any ideas on what I can do to be able to retain the second form of import and still have the exec'd functions visible?
Here's the code... I have three files: ################################### # modA.py def dynamicdef(name, amt): '''Dynamically defines a new function with the given name that adds the given amt to its argument and returns the result.''' stm = "def %s(x):\n\treturn x + %d" % (name, amt) print stm # exec stm # --- with this, 'name' is only accessible within this fn exec stm in globals() # --- this makes it global within this module... print eval(name) dynamicdef('plus5', 5) print plus5(7) ################################### # modB.py # This uses the dynamicdef to dynamically define a new function, and it # works fine, with the newly defined function being accessible thru the modA # module... import modA modA.dynamicdef('plus10', 10) print help(modA.plus5) print help(modA.plus10) print modA.plus5(20) print modA.plus10(20) ################################### # modC.py # This uses the dynamicdef to dynamically define a new function, but it # doesn't work; seems like knowledge of the newly defined function in the # modA module is not propagated back to this context or something...? from modA import * dynamicdef('plus10', 10) print help(plus5) #print help(plus10) # !!! Fails: NameError: name 'plus10' is not defined print plus5(20) print plus10(20) ################################### Thanks for any help/suggestions, ---nadeem -- http://mail.python.org/mailman/listinfo/python-list