是否可以做这样的事情?
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())
答案 0 :(得分:3)
这是一个可怕的想法,即使它能够发挥作用,它也无法实现。
导入后放置global
语句将完全没有效果。唯一要做的就是将该名称标记为当前范围内的全局 。函数返回后,调用者仍然不知道导入的名称。
无论如何,你无论如何都不应该使用from MyModule import *
。