python - 在外部范围中定义的阴影名称有什么问题?

我刚刚切换到 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/

相关文章:

linux - 使用 Bash 自动将最后一个命令的输出捕获到变量中?

linux - 使用 tar、gz、zip 或 bzip2 拆分文件

linux - 如何强制从另一个 SSH session 中分离 screen ?

python - 编码/解码有什么区别?

linux - 如何从另一个文件A中删除文件B上出现的行?

python - 自定义类型的对象作为字典键

python - 如何删除numpy数组中的特定元素

linux - 如何提取 rpm 的内容?

linux - 比较 bash 中的整数,需要一元运算符

Python Infinity - 有什么注意事项吗?