是否可以从函数内部导入全局范围(Python)?

时间:2011-06-14 17:30:57

标签: python import globals

我正在尝试从函数内部导入一个模块,并使其可用于我的整个文件,就像我在任何函数之外和所有其他代码之前导入一样。它在函数中的原因是因为我没有太多控制脚本的结构。这是不是可以在不使用hacking __builtin__或者在我的代码周围传递我需要的东西?

2 个答案:

答案 0 :(得分:9)

globals()["os"] = __import__("os")?

之类的内容

我想如果你想要这可以包含在泛型函数中,因为模块名是一个字符串。

答案 1 :(得分:7)

看到你的新评论,我想强调这听起来没必要。您实际上是通过在函数中导入而不是以正常方式导入脚本顶部来修改脚本 more 。尽管如此,本着回答问题的精神,我将离开我之前的答案。


老实说,我不确定这是否是正确的方法,但快速检查确认如果在导入之前在函数中声明模块名称为global,则会将其导入全局命名空间。

>>> def import_re():
...     global re
...     import re
... 
>>> re
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 're' is not defined
>>> import_re()
>>> re
<module 're' from '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/re.pyc'>

除非你真的需要,否则不要这样做 - 然后用大红色字母写下来,可以这么说。