可以在函数内部导入到全局作用域吗(Python)?

15 投票
2 回答
6385 浏览
提问于 2025-04-16 19:33

我想在一个函数里面导入一个模块,然后让这个模块在整个文件中都能用,就像我在所有代码之前、函数外面导入一样。之所以放在函数里,是因为我对脚本的结构没有太多控制。这样做有没有可能,而不需要去搞一些复杂的操作,比如修改内置功能或者在代码中到处传递我需要的东西?

2 个回答

10

看到你们的新评论,我想强调一下,这样做听起来没必要。其实在函数内部导入模块比在脚本顶部正常导入要更改脚本更多。不过,为了回答你们的问题,我还是保留了之前的回答。


老实说,我不太确定这样做是否正确,但快速检查一下发现,如果你在函数内部先把模块名声明为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'>

除非你真的必须这样做,否则不要这么做——如果真的要做,就把这个写得大大的红字提醒自己。

11

你觉得像这样写 globals()["os"] = __import__("os")? 怎么样?

我想如果你想的话,可以把这个写成一个通用的函数,因为模块名是一个字符串。

撰写回答