如何正确命名变量以避免在Python中出现类似“外部作用域的阴影名称”的警告
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何正确命名变量以避免在Python中出现类似“外部作用域的阴影名称”的警告相关的知识,希望对你有一定的参考价值。
我使用PyCharm作为我的python程序,我在下面编写代码:
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,但是,我仍然不知道如何在函数中命名变量。
你能给我一些建议吗?
一般来说:只是忽略警告。这只是一个警告,而不是错误。您可以使用碰巧匹配的全局和本地名称。
但是,无论如何,我不会在全球范围内调用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
如果你的名字重复使用“_”来避免这种警告。这是一种常见的做法。
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
警告shadows name XX from outer scope
不是PEP8问题,而是来自Pycharm的实际警告,告诉你以这种方式重用变量名是一个坏主意。换句话说,这不是代码风格问题,而是稍后可能在较大程序中带来问题的东西。
我的建议是,尽可能避免重用变量名。打字这个:
for root_path, directory_name, file_name in os.walk(root_dir):
不需要花费很多时间,并且可以避免将来出现不良副作用。
但是,如果由于任何原因你绝对需要重用变量名并想要删除警告消息,你可以在Pycharm中禁用它(首选项 - >编辑器 - >代码样式 - >检查 - >外部作用域的阴影名称)。但这通常是一个坏主意。
以上是关于如何正确命名变量以避免在Python中出现类似“外部作用域的阴影名称”的警告的主要内容,如果未能解决你的问题,请参考以下文章