在这个python for循环中,三重下划线有什么意义吗?

在这个python for循环中,三重下划线有什么意义吗?,python,python-3.x,naming-conventions,Python,Python 3.x,Naming Conventions,Python中的三重下划线有什么意义吗 这是一个脚本,用于获取目录中的所有.txt文件 for ___,___,files in os.walk(some_folder): files[:]=[x for x in files if x.lower().endswith('txt')] for file in files: 阅读此处的其他问题通常使用一个下划线作为一次性变量,使用三重下划线是错误的做法还是有意义?单重、双重、三重,通常,脚本中任何数量的纯下划线名称都隐式表示将不

Python中的三重下划线有什么意义吗

这是一个脚本,用于获取目录中的所有
.txt
文件

for ___,___,files in os.walk(some_folder):
    files[:]=[x for x in files if x.lower().endswith('txt')]
    for file in files:

阅读此处的其他问题通常使用一个下划线作为一次性变量,使用三重下划线是错误的做法还是有意义?

单重、双重、三重,通常,脚本中任何数量的纯下划线名称都隐式表示将不使用该值(事实上,它没有使用任何字母来表示“名称”)

当然,这并不是一成不变的(也就是说,Python对待
\uuuuuuuuu
与对待
foo
这样的名称没有任何区别),而是程序员通常理解和尊重的惯例


单下划线只有在交互模式下才有作用,它是脚本中使用的下划线,而不是
\uuuuu
\uuu
。使用
\uuuu
\uuu
看起来很难看,实际上是完全不必要的;我不明白为什么有人会决定在
\uu
上使用它;不要复制它们,选择使用它
当你需要传达相同的信息时。

就像Jim说的那样,
\uuuuuuuuuuu
语法通常意味着该名称所捕获的内容(
\uuuuuuuuuuuu
)是无用的,或者是垃圾。为了完整起见,请看下面的示例:

我有一个文件夹,
test
,其结构如下:

test
    subtest1
        file1.txt
        file2.txt
    subtest2
        file3.txt
看看当我在
test
上使用
os.walk
时会发生什么:

>>> list(os.walk('test'))
[('test', ['subtest1', 'subtest2'], ['.DS_Store']), ('test/subtest1', [], ['file1.txt', 'file2.txt']), ('test/subtest2', [], ['file3.txt'])]
>>> len(list(os.walk('test')))
3
因此,从技术上讲,
os.walk('test')
返回的生成器中有三个元素。但是,由于我们清楚地看到一些嵌套的数据结构,每个元素中有多少个元素

>>> [len(x) for x in os.walk('test')]
[3, 3, 3]
好的,在
os.walk('test')
的每个元素中都有三个子元素。例如,在
列表(os.walk('test'))[0]
中,有
'test'
(第一个元素)、
['subtest1','subtest2']
(第二个元素)和
['.DS_Store']
(第三个也是最后一个元素)。最后一个元素包含由第一个元素表示的任何文件夹中的非目录文件(因此.DS_Store是
test
目录中的文件)

让我们进入你的
for
循环,然后(我还不会使用下划线):


因此,os.walk('test')中主目录、子目录、文件的
语法实际上就是我们所说的“解包”。我们将
主目录
分配给os.walk('test')
中的第一个元素,将
子目录
分配给第二个元素,等等,对读者说,“忘记这些值;我已经命名了我需要的值。”在您的例子中,代码是这样说的,“忘记这些文件来自的目录;我只需要文件名本身。”

谢谢,我认为[:]正确吗第2行也是冗余的?@Notts90更改
文件的位置;我不确定作者为什么决定这样做,所以我同意,从我所看到的来看,这是冗余的。使用
\uuuu
而不是
\u
的一个常见原因是如果您使用的是gettext,而
\u
通常是翻译函数。
>>> for main_dir, sub_dirs, files in os.walk('test'):
...         print("Main directory: ", main_dir)
...         print("Sub-directories: ", ', '.join(sub_dirs))
...         print("Files: ", ', '.join(files))
... 
Main directory:  test
Sub-directories:  subtest1, subtest2
Files:  .DS_Store
Main directory:  test/subtest1
Sub-directories:  
Files:  file1.txt, file2.txt
Main directory:  test/subtest2
Sub-directories:  
Files:  file3.txt