在外部作用域中定义阴影名称有多糟糕?

发布于 2021-01-29 18:57:55

我刚切换到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)
关注者
0
被浏览
35
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    在上面的代码片段中没什么大不了的,但是可以想象一个具有更多参数和更多代码行的函数。然后,您决定将data参数重命名为,yadda但错过了函数主体中使用该参数的位置之一…现在data是指全局变量,您开始有怪异的行为-NameError如果不这样做,您将拥有更明显的表现有一个全球的名字data。

    还要记住,在Python中,所有东西都是对象(包括模块,类和函数),因此对于函数,模块或类没有明显的命名空间。另一种情况是将函数导入foo模块的顶部,然后在函数主体中的某个位置使用它。然后,在函数中添加一个新参数,并将其命名为-bad lucky- foo

    最后,内置函数和类型也位于相同的名称空间中,并且可以以相同的方式进行阴影处理。

    如果您的功能简短,命名合理且单元测试覆盖面不错,那么这些都不是什么大问题,但是好吧,有时候您必须维护的代码不够完美,并被警告可能存在的问题。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看