在外部作用域中定义的阴影名称有什么问题?
回答问题 我刚刚切换到 PyCharm,我对它为我改进代码提供的所有警告和提示感到非常高兴。除了这个我不明白的: 此检查检测在外部范围中定义的阴影名称。 我知道从外部范围访问变量是不好的做法,但是隐藏外部范围有什么问题? 这是一个示例,其中 PyCharm 给了我警告信息: data = [4, 5, 6] def print_data(data): # <-- Warning: "Shadows
·
回答问题
我刚刚切换到 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
。
最后,内置函数和类型也存在于相同的命名空间中,并且可以以相同的方式被隐藏。
如果你有简短的函数、良好的命名和不错的单元测试覆盖率,那么这一切都不是什么大问题,但是,有时你必须维护不完美的代码,并且被警告这些可能的问题可能会有所帮助。
更多推荐
已为社区贡献126473条内容
所有评论(0)