在这个python for循环中,三重下划线有什么意义吗?
Python中的三重下划线有什么意义吗 这是一个脚本,用于获取目录中的所有在这个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: 阅读此处的其他问题通常使用一个下划线作为一次性变量,使用三重下划线是错误的做法还是有意义?单重、双重、三重,通常,脚本中任何数量的纯下划线名称都隐式表示将不
.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