Python 中的动态模块加载范围
当我运行以下示例时:
def a():
exec('import math')
b()
def b():
print math.cos(90)
a()
我收到以下错误: NameError:未定义全局名称“math”
我想做的是从 a() 函数内动态加载一些模块 并在函数 b() 中使用它们,
我希望它对于 b() 的观点来说尽可能无缝。这意味着,我不想在 a() 中使用 __ import __ 加载模块并传递对 b() 函数的引用,事实上 b() 的函数签名必须保持这样: b()
有什么办法可以做到这一点吗? 谢谢!
When I run the following sample:
def a():
exec('import math')
b()
def b():
print math.cos(90)
a()
I get the following error:
NameError: global name 'math' is not defined
What I am trying to do is to dynamically load some modules from within the a() function
and use them in function b()
I want it to be as seamless as possible for the b()'s point of view. That means, I don't want to load the module with _ _ import _ _ in a() and pass a reference to the b() function, in fact it is mandatory that the b()'s function signature remains just this: b()
is there any way to do this guys?
thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
根据对帖子的评论:如果想在运行时加载模块,请在需要的地方加载:
回答您的问题:
Upon comments on the post: if want to load modules runtime, load where you need it:
Answering to your question:
Python 2.x 的一种方法是:
但我通常建议使用
__import__()
。我不知道你实际上想要实现什么,但这也许对你有用:One approach for Python 2.x would be:
But I would generally recommend using
__import__()
. I don't know what you are actually trying to achieve, but maybe this works for you: