首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在函数中导入文件级别?(Python 2)

在函数中导入文件级别?(Python 2)
EN

Stack Overflow用户
提问于 2013-06-11 08:04:49
回答 1查看 79关注 0票数 0

有可能做这样的事吗?

代码语言:javascript
复制
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中每个函数的名称。即使我这么做了,那也是一个丑陋的全球性声明。

基本上,我可以取所有局部变量,并使它们成为全局变量吗?

编辑:这似乎适用于测试代码:

代码语言:javascript
复制
def test():
    import time
    global time
    print "Inside test function: %s" % str(time.time())

test()
print "outside function: %s" % str(time.time())

这也起了作用:

代码语言:javascript
复制
def test():
    from time import time
    global time
    print "Inside test function: %s" % str(time())

test()
print "outside function: %s" % str(time())

然而,这一做法并没有奏效:

代码语言:javascript
复制
def test():
    import time
    print "Inside test function: %s" % str(time.time())

test()
print "outside function: %s" % str(time.time())
EN

回答 1

Stack Overflow用户

发布于 2013-06-11 08:07:35

这是一个可怕的想法,即使它可能成功,但它不能。

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

无论如何,您都不应该使用from MyModule import *

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17039230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档