我刚刚切换到 PyCharm,我很高兴它为我提供的所有警告和提示来改进我的代码。除了这个我不明白:
此检查检测在外部范围中定义的隐藏名称。
我知道从外部范围访问变量是不好的做法,但是隐藏外部范围有什么问题?
这是一个示例,其中 PyCharm 向我发出警告消息:
data = [4, 5, 6]
def print_data(data): # <-- Warning: "Shadows 'data' from outer scope
print data
print_data(data)
原文由 Framester 发布,翻译遵循 CC BY-SA 4.0 许可协议
上面的代码片段没有什么大不了的,但是想象一个函数有更多的参数和更多的代码行。然后你决定将你的
data
参数重命名为yadda
,但错过了它在函数体中使用的地方之一……现在data
全局,你开始有奇怪的行为 - 如果你没有全局名称data
,你会有更明显的NameError
。还要记住,在 Python 中一切都是对象(包括模块、类和函数),因此函数、模块或类没有不同的名称空间。另一种情况是您在模块顶部导入函数
foo
,并在函数主体的某处使用它。然后向函数添加一个新参数并将其命名为 - bad luck -foo
。最后,内置函数和类型也存在于相同的命名空间中,并且可以以相同的方式隐藏。
如果您有简短的功能、良好的命名和不错的单元测试覆盖率,那么这一切都不是什么大问题,但是有时您必须维护不完美的代码,并且被警告此类可能的问题可能会有所帮助。