可以在函数内部导入到全局作用域吗(Python)?
我想在一个函数里面导入一个模块,然后让这个模块在整个文件中都能用,就像我在所有代码之前、函数外面导入一样。之所以放在函数里,是因为我对脚本的结构没有太多控制。这样做有没有可能,而不需要去搞一些复杂的操作,比如修改内置功能或者在代码中到处传递我需要的东西?
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")?
怎么样?
我想如果你想的话,可以把这个写成一个通用的函数,因为模块名是一个字符串。