我在我的python程序中使用了PyCharm,我编写了下面的代码:
def get_files_name():
root_dir = "/Volumes/NO NAME/"
for root, ds, fs in os.walk(root_dir):
for f in fs:
print(os.path.join(root_dir, f))
get_files_name()
for root, ds, fs in os.walk(other_dir):
pass
因此,我得到一个警告文本,如“阴影名称'ds‘从外部范围”。我知道作用域的影响,但我仍然希望使用相同的代码格式,比如"for root,ds,fs in .“。在范围内或外部。
我搜索了PEP8,但是,我仍然不知道如何规范地命名函数中的变量。
你能给我一些建议吗?
发布于 2018-03-04 10:01:45
一般情况下,只需忽略警告即可。这只是一个警告,不是一个错误。您使用的是恰巧匹配的全局和本地名称。
但是,无论如何,我不会在全局范围内调用os.walk()
。我宁愿把它也放入一个函数中,它有你不再使用的名字的好副作用。
例如,您可以使用一个main()
函数:
def main():
get_files_name()
for root, ds, fs in os.walk(other_dir):
pass
if __name__ == '__main__':
main()
一般来说,您不希望像root, ds, fs
这样的循环名称在模块中以全局形式出现。这些都是实现细节,不应该成为模块的公共API的一部分。如果您必须在全局范围内使用类似于for
循环,请在名称上使用_
单下划线前缀,并考虑在使用del
的循环后删除它们。
for _root, _ds, _fs in os.walk(other_dir):
# do something with the files or directories
# clean variables for the loop that are not part of the API
del _root, _ds, _fs
发布于 2018-03-04 10:02:15
如果你的名字重复使用"_“来避免这样的警告,这是一种常见的做法。
def get_files_name():
root_dir = "/Volumes/NO NAME/"
for root, _ds, fs in os.walk(root_dir):
for f in fs:
print(os.path.join(root_dir, f))
get_files_name()
for root, _ds, fs in os.walk(other_dir):
pass
发布于 2018-03-04 10:02:10
这个警告shadows name XX from outer scope
不是PEP8问题,而是Pycharm的实际警告,它告诉您以这种方式重用变量名是个坏主意。换句话说,这不是一个代码风格的问题,而是一些可能在以后的大型程序中带来问题的问题。
我的建议是,在可能的情况下避免重复使用变量名。输入以下内容:
for root_path, directory_name, file_name in os.walk(root_dir):
不会花很多时间,而且将来也会避免不良的副作用。
不过,如果出于任何原因,您绝对需要重用变量名,并且希望删除警告消息,则可以在Pycharm中禁用它(Preferences -> Editor -> Code Style -> Code ->隐藏外部作用域的名称)。但这通常是个坏主意。
https://stackoverflow.com/questions/49094078
复制相似问题