python – 在外部范围中定义的阴影名称有多糟糕?

我只是切换到Pycharm,我很高兴所有的警告和提示,它提供我改进我的代码。除了这个我不明白的:

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

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

这里有一个例子,Pycharm给了我警告消息:

data = [4, 5, 6]

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

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

还要记住,在Python中,一切都是一个对象(包括模块,类和函数),所以没有明确的命名空间的函数,模块或类。另一种情况是,在模块的顶部导入函数foo,并在函数体中的某处使用它。然后你添加一个新的参数到你的函数,并命名为 – bad luck – foo。

最后,内置函数和类型也存在于同一个命名空间中,并且可以以相同的方式进行阴影。

如果你有短的功能,良好的命名和一个体面的单元测试覆盖,这不是很大的问题,但很好,有时你必须保持不完美的代码,并警告这种可能的问题可能有所帮助。

http://stackoverflow.com/questions/20125172/how-bad-is-shadowing-names-defined-in-outer-scopes

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 在外部范围中定义的阴影名称有多糟糕?