使模块全球化?

时间:2010-02-02 20:20:11

标签: python module global

我想知道为什么

 >>> def func2():
...     global time
...     import time
...
>>> time
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'time' is not defined
>>> func2()
>>> time
<module 'time' (built-in)>
>>>

有效,但

   >>> def func():
...     global module
...     module="time"
...     exec ("global %s" %module)
...     exec ("import %s" %module)
...
>>> time
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'time' is not defined
>>> func()
>>> time
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'time' is not defined

不工作,我怎么能让它工作=) 谢谢

4 个答案:

答案 0 :(得分:7)

您的每个exec()调用都发生在单独的命名空间中。放弃这条道路;它只会导致毁灭。

答案 1 :(得分:1)

因为exec默认使用自己的范围。如果你做exec "global {0}; import {0}".format(module) in globals(),那么它就可以了。

你不应该这样做,除非你真的需要。

答案 2 :(得分:1)

要导入名称为字符串的模块,请使用

time=__import__('time')

这是你可以使用它的一种方式

usermodulenames = ["foo","bar","baz"]
usermodules = dict((k,__import__(k)) for k in usermodulenames)

答案 3 :(得分:0)

你要做的事情要么非常复杂,要么非常奇怪。这是它的工作原理:

exec ("import %s" % module) in globals()

请描述您要解决的更大问题