擅长:python、mysql、java
<p>从execfile的<a href="http://docs.python.org/library/functions.html#execfile" rel="nofollow noreferrer">Python documentation</a>中:</p>
<p><em>执行文件(filename[,globals[,locals]])</em></p>
<p><em>如果省略locals字典,则默认为globals字典。如果两个字典都被省略,则表达式将在调用execfile()的环境中执行。</em></p>
<p>execfile有两个可选参数。由于忽略了这两个参数,所以脚本将在调用execfile的环境中执行。因此进口的原因游戏.py改变行为。在</p>
<p>此外,我还总结了以下进口行为游戏.py以及脚本.py公司名称:</p>
<ul>
<li><p>在游戏.py<code>import gamelib</code>将gamelib模块导入到<strong>全局和局部</strong>。这是传递给脚本.py这就是为什么gamelib可以在ScriptObject操作方法(从全局访问)中访问。</p></li>
<li><p>在脚本.py<code>import gamelib</code>只将gamelib模块导入到<strong>局部变量中</strong>(不确定原因)。因此,当尝试从全局变量的ScriptObject操作方法访问gamelib时,会出现NameError。如果您将导入移动到action方法的作用域中(将从本地访问gamelib),它将起作用:</p>
<pre><code>class ScriptObject:
def action(self):
import gamelib
print("ScriptObject.action(): calling gamelib.play_sound()")
gamelib.play_sound()
</code></pre></li>
</ul>