有可能做这样的事吗?
def loadModules():
import time
from myModule import *
def runFunction():
try:
print str(time.time())
print myFunction() # myFunction is in myModule (myModule.myFunction)
except NameError:
raise RuntimeError("Module was not initialized. Call loadModules() first.")
if (__name__ == "__main__"):
# this should fail
try:
runFunction()
except RuntimeError:
print "Exception raised as expected."
loadModules()
runFunction() # it should work now这将不像预期的那样工作,因为导入loadModules函数中的模块不会在文件级别声明它们。
对于像time这样的模块,我可以在导入之后添加一个global time语句。但是,在导入的项未知的情况下,如何做到这一点,如在from myModule import *中?我不会自动知道myModule中每个函数的名称。即使我这么做了,那也是一个丑陋的全球性声明。
基本上,我可以取所有局部变量,并使它们成为全局变量吗?
编辑:这似乎适用于测试代码:
def test():
import time
global time
print "Inside test function: %s" % str(time.time())
test()
print "outside function: %s" % str(time.time())这也起了作用:
def test():
from time import time
global time
print "Inside test function: %s" % str(time())
test()
print "outside function: %s" % str(time())然而,这一做法并没有奏效:
def test():
import time
print "Inside test function: %s" % str(time.time())
test()
print "outside function: %s" % str(time.time())发布于 2013-06-11 08:07:35
这是一个可怕的想法,即使它可能成功,但它不能。
在导入之后放置一个global语句将完全没有效果。唯一能做的就是在当前范围内将该名称标记为全局名称。函数返回后,调用方仍然不知道导入的名称。
无论如何,您都不应该使用from MyModule import *。
https://stackoverflow.com/questions/17039230
复制相似问题