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

此检查检测在外部作用域中定义的阴影名称。

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

下面是一个例子,PyCharm给了我警告信息:

data = [4, 5, 6]

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

print_data(data)

当前回答

data = [4, 5, 6] # Your global variable

def print_data(data): # <-- Pass in a parameter called "data"
    print data  # <-- Note: You can access global variable inside your function, BUT for now, which is which? the parameter or the global variable? Confused, huh?

print_data(data)

其他回答

这样做:

data = [4, 5, 6]

def print_data():
    global data
    print(data)

print_data()

要忽略这个警告,就像克里斯托弗在评论中说的,你可以在上面评论

# noinspection PyShadowingNames

这取决于函数的长度。函数越长,将来修改它的人写数据时认为它意味着全局的可能性就越大。实际上,它指的是局部函数,但由于函数太长,它们并不清楚是否存在具有该名称的局部函数。

对于你的例子函数,我认为遮蔽全局一点都不坏。

我认为这条规则没有多大帮助。我只是禁用了它,点击设置->编辑器->检查,然后勾选这条规则:

Shadowing names from outer scope
data = [4, 5, 6] # Your global variable

def print_data(data): # <-- Pass in a parameter called "data"
    print data  # <-- Note: You can access global variable inside your function, BUT for now, which is which? the parameter or the global variable? Confused, huh?

print_data(data)