<p><code>exec</code>执行当前作用域中的代码。在函数内部,这意味着(函数)局部作用域。在</p>
<p>通过给<code>exec</code>一个元组<code>(code, scope)</code>,可以告诉<code>exec</code>将变量放入另一个范围。例如,可以使用<code>globals()</code>使名称在模块级别可用。在</p>
<p>请注意,<a href="https://docs.python.org/2/library/functions.html#globals" rel="nofollow noreferrer">globals</a></p>
<blockquote>
<p>is always the dictionary of the current module (inside a function or method, this is the module where it is defined, not the module from which it is called).</p>
</blockquote>
<p>因此,在您的示例中,您必须将所需的范围传递给实用程序函数:</p>
<p><em>anyimport.py</em>:</p>
<pre><code>class anyimport(object):
def __init__(self, importmodule, scope):
exec (importmodule, scope)
</code></pre>
<p><em>测试.py</em>:</p>
^{pr2}$
<p><em>主.py</em>:</p>
<pre><code>from anyimport import anyimport
if __name__ == '__main__':
anyimport('from test import *', globals())
# 42 foo
print a, b
</code></pre>
<p>用<code>python main.py</code>测试它。确保所有文件都在当前目录中。在</p>
<h2>替代方案</h2>
<p>如果不一定要使用<code>exec</code>,一种更优雅的方法是使用Python提供的import实用程序。在</p>
<p>以下内容取自<a href="https://stackoverflow.com/a/4526709/453074">https://stackoverflow.com/a/4526709/453074</a>,相当于<code>from some.package import *</code>:</p>
<blockquote>
<p>[...] it's more convenient to user <code>importlib</code>:</p>
</blockquote>
<pre><code>globals().update(importlib.import_module('some.package').__dict__)
</code></pre>
<p>一。在</p>