我的 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,但是我仍然不知道如何规范地命名函数中的变量。
你能给我一些建议吗?
最佳答案
一般来说:忽略警告即可。这只是一个警告,而不是错误。您可以同时使用恰好匹配的全局名称和本地名称。
但是,我不会在全局范围内调用 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
)作为全局变量保留在您的模块中。这些是实现细节,不应成为模块公共(public) 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
关于python - 如何正确命名变量以避免在 Python 中出现类似 "Shadows name from outer scope"的警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49094078/