python - 如何正确命名变量以避免在 Python 中出现类似 "Shadows name from outer scope"的警告

标签 python scope coding-style convention

我的 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/

相关文章:

python - 使用可选参数和多个参数的可行性

javascript - Angular 工厂访问私有(private)函数

python - Pandas + sklearn 线性回归失败

python - 本地数据库上的 Firebird 连接在 Python 脚本中是不可能的

javascript - 检查函数是否已经绑定(bind)在纯 JavaScript 中的更好方法?

c++ - 基于开关访问成员变量的好方法

java - POJO的getters和setters有必要吗

python - 要在 python 中打印特定的文件夹名称?

python - 使用 kubernetes python 客户端将文件从 pod 复制到主机

javascript - 循环和范围解析问题中的 setTimeout