我刚刚切换到 PyCharm,我对它为我改进代码提供的所有警告和提示感到非常高兴。除了这个我不明白的:
This inspection detects shadowing names defined in outer scopes.
我知道从外部范围访问变量是不好的做法,但是隐藏外部范围有什么问题?
这是一个例子,PyCharm 给了我警告信息:
data = [4, 5, 6]
def print_data(data): # <-- Warning: "Shadows 'data' from outer scope
print data
print_data(data)
最佳答案
上面的代码段没有什么大不了的,但是想象一个函数有更多的参数和更多的代码行。然后你决定将你的 data
参数重命名为 yadda
,但是错过了它在函数体中使用的地方之一......现在 data
指的是全局,并且您开始出现奇怪的行为 - 如果您没有全局名称 data
,则会出现更明显的 NameError
。
还要记住,在 Python 中,一切都是对象(包括模块、类和函数),因此函数、模块或类没有不同的命名空间。另一种情况是您在模块顶部导入函数 foo
,并在函数体的某处使用它。然后你向你的函数添加一个新参数并命名它 - 运气不好 - foo
.
最后,内置函数和类型也存在于同一个命名空间中,并且可以以同样的方式被隐藏。
如果您有简短的函数、良好的命名和良好的单元测试覆盖率,这都不是什么大问题,但是,有时您必须维护不完美的代码,并且被警告此类可能的问题可能会有所帮助。
https://stackoverflow.com/questions/20125172/