回答问题

我刚刚切换到 PyCharm,我对它为我改进代码提供的所有警告和提示感到非常高兴。除了这个我不明白的:

此检查检测在外部范围中定义的阴影名称。

我知道从外部范围访问变量是不好的做法,但是隐藏外部范围有什么问题?

这是一个示例,其中 PyCharm 给了我警告信息:

data = [4, 5, 6]

def print_data(data): # <-- Warning: "Shadows 'data' from outer scope
    print data

print_data(data)

Answers

上面的代码段没有什么大不了的,但是想象一个有更多参数和更多代码行的函数。然后你决定将你的data参数重命名为yadda,但是错过了它在函数体中使用的地方之一......现在data指的是全局,你开始有奇怪的行为 - 你会有一个更明显的NameError如果您没有全局名称data

还要记住,在 Python 中,一切都是对象(包括模块、类和函数),因此函数、模块或类没有不同的命名空间。另一种情况是您在模块顶部导入函数foo,并在函数体的某处使用它。然后你在你的函数中添加一个新参数并将它命名为 - 运气不好 -foo

最后,内置函数和类型也存在于相同的命名空间中,并且可以以相同的方式被隐藏。

如果你有简短的函数、良好的命名和不错的单元测试覆盖率,那么这一切都不是什么大问题,但是,有时你必须维护不完美的代码,并且被警告这些可能的问题可能会有所帮助。

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐