擅长:python、mysql、java
<p>每个模块都有自己的全局变量,
当我们说<code>'fn': fn</code>时,我们的意思是:</p>
<ul>
<li>在自己的模块中使用<code>fn</code>(例如<code>answer.py</code>),该模块有自己的全局变量</李>
</ul>
<p>因此,如果在<code>answer.py</code>中没有像<code>x</code>这样的全局变量,<code>fn</code>无法调用它,您将得到<code>NameError</code></p>
<p>以下是一个例子:</p>
<pre><code># content of answer.py
x = 10
def k1():
print(f'{globals()["x"]}')
s = """
print(globals()['x'])
"""
# uses current's module ('answer.py') global variables to run script in `s`
exec(s)
# creates new global variables to run script in `s`
exec(s, {'x': 20})
# uses current's module global variables to call `k1` in module 'answer.py' which has his own global variables
exec('k1()')
# creates new global variables to call `k1` in module 'answer.py' which has his own global variables
# when we say 'k1': k1, it means use `k1` in module 'answer.py' which has his own global variables
exec('k1()', {'k1': k1, 'x': 20})
</code></pre>
<p>结果:</p>
<pre><code>10
20
10
10
</code></pre>
<p>因此,如果您想让这些函数在全局变量中使用<code>x</code>,您可以选择以下选项:</p>
<ul>
<li>更改该模块的全局变量</li>
<li>不要使用模块函数,将其写入字符串并将全局变量传递给它</li>
</ul>