了解紧凑的代码段

时间:2014-08-06 22:23:28

标签: python

我继承了一些Python脚本,我正在努力理解它们。我是一名初级Python程序员,但在其他几种脚本语言方面经验丰富。

以下Python代码段生成一个文件列表,然后在稍后的代码块中使用。我想知道它是如何做到的。我知道os.path.isfile是对文件类型的测试,os.path.join将参数组合到文件路径字符串中。有人能帮我理解剩下的吗?

flist = [file for file in whls if os.path.isfile(os.path.join(whdir, i, file))]

3 个答案:

答案 0 :(得分:1)

whls是某种可迭代的。

对于whls中的每个元素,它会检查os.path.join(whdir, i, that_element)是否为文件。 (Windows上的os.path.join("C:","users","adsmith")r"C:\users\adsmith"

如果是,则将其包含在该列表中。

正如@jonsharpe在评论中所说,这是list comprehension的一个例子,非常值得您掌握。

答案 1 :(得分:0)

列表理解意味着python将迭代whls的每个成员(这可能是一个元组/列表?),并且对于每个项目,它将测试os.path.join(whdir, i, file)是否是文件(如反对目录等)。它将返回一个列表,其中仅包含通过此条件检查的whls中的元素。

答案 2 :(得分:0)

此列表理解等效于以下循环:

flist = []
for file in whls:
    if os.path.isfile(os.path.join(whdir, i, file)):
        flist.append(file)

列表理解更紧凑。性能方面,它们是相似的,列表理解速度要快一些,因为它不会加载append()方法。