我刚刚切换到PyCharm,我很高兴它为我提供的所有警告和提示来改进我的代码。除了这个我不明白
此检查检测在外部作用域中定义的阴影名称。
我知道从外部范围访问变量是不好的做法,但阴影外部范围的问题是什么?
下面是一个例子,PyCharm给了我警告信息:
data = [4, 5, 6]
def print_data(data): # <-- Warning: "Shadows 'data' from outer scope
print data
print_data(data)
目前投票最多、接受度最高的答案和这里的大多数答案都没有抓住重点。
这与你的函数有多长无关,也与你如何描述性地命名你的变量(希望最小化潜在的名称冲突的机会)无关。
The fact that your function's local variable or its parameter happens to share a name in the global scope is completely irrelevant. And in fact, no matter how carefully you choose you local variable name, your function can never foresee "whether my cool name yadda will also be used as a global variable in future?". The solution? Simply don't worry about that! The correct mindset is to design your function to consume input from and only from its parameters in signature. That way you don't need to care what is (or will be) in global scope, and then shadowing becomes not an issue at all.
换句话说,只有当你的函数需要使用同名的局部变量和全局变量时,阴影问题才会起作用。但是您应该首先避免这样的设计。OP的代码并没有这样的设计问题。只是PyCharm不够智能,它会发出警告以防万一。因此,为了让PyCharm开心,也为了让我们的代码干净,请参阅引用silyevsk的答案的解决方案,以完全删除全局变量。
def print_data(data):
print data
def main():
data = [4, 5, 6]
print_data(data)
main()
这是“解决”这个问题的正确方法,通过修复/删除全局的东西,而不是调整当前的局部函数。