0

有可能做这样的事情吗?

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())
4

1 回答 1

3

这是一个可怕的想法,即使它可以工作,但它不能。

在导入之后放置一个global语句将具有完全为零的效果。唯一要做的就是在当前范围内将该名称标记为全局。一旦函数返回,调用者仍然不知道导入的名称。

在任何情况下,你都不应该使用from MyModule import *

于 2013-06-11T08:07:35.147 回答