9

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

4

2 回答 2

9

像这样的东西怎么样globals()["os"] = __import__("os")?

如果您愿意,我想这可以包含在一个通用函数中,因为模块名称是一个字符串。

于 2011-06-14T17:38:22.167 回答
7

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


老实说,我不确定这是执行此操作的正确方法,但快速检查确认如果您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'>

除非你真的必须这样做,否则不要这样做——然后用大红字写,可以这么说。

于 2011-06-14T17:36:42.257 回答