擅长:python、mysql、java
<p><a href="https://stackoverflow.com/a/20125739/728675">The currently most up-voted and accepted answer</a>这里的大多数答案都没有抓住要点。</p>
<p>不管你的函数有多长,或者你如何用描述性的方式命名变量(希望尽量减少潜在的名称冲突)。</p>
<p>函数的局部变量或其参数碰巧在全局范围内共享一个名称,这一事实完全不相关。事实上,无论您如何谨慎地选择本地变量名,您的函数都无法预知“我的酷名<code>yadda</code>将来是否也将用作全局变量?”。解决办法?别担心!<strong>正确的思路是设计您的函数以使用签名中的参数输入,并且仅使用其参数输入,这样您就不需要关心全局范围内是什么(或将是什么),然后阴影就完全不成问题了。</p>
<p>换句话说,阴影问题只在函数需要使用相同名称的局部变量和全局变量时才重要。但你首先应该避免这样的设计。操作系统的代码并没有这样的设计问题。只是PyCharm不够聪明,它会发出警告以防万一。所以,为了让PyCharm高兴,同时也为了让我们的代码干净,请参阅这个引用<a href="https://stackoverflow.com/a/39201621/728675">silyevsk 's answer</a>的解决方案,以完全删除全局变量。</p>
<pre><code>def print_data(data):
print data
def main():
data = [4, 5, 6]
print_data(data)
main()
</code></pre>
<p>这是“解决”这个问题的正确方法,通过修复/删除全局对象,而不是调整当前的本地函数。</p>