2012-02-29 49 views
0

在完成一些關於如何僅在python中返回頂級文件夾路徑的搜索之後,我發現了兩種看起來返回相同結果的相當不同的方法:在Python中返回頂級目錄的路徑:比較兩個解決方案

def listTopDirs(folder): 
    return [name for name in (os.path.join(folder, each) for each in os.listdir(folder)) if os.path.isdir(name)] 

比。

def listTopDirs(): 
    return [os.path.abspath(name) for name in os.listdir(".") if os.path.isdir(name)] 

當我在我的機器上嘗試它們時,這些返回的結果數量相同。

要麼被認爲是更pythonic?使用其中一種算法有什麼優勢?

回答

1

儘管第二個片段對我來說似乎更加Pythonic,但快速測試證明第一個片段更快。我發佈了下面的結果。


def listTopDirs(folder): 
    return [name for name in (os.path.join(folder, each) for each in os.listdir(folder)) if os.path.isdir(name)] 

$ python -m timeit 'import os;r = [name for name in (os.path.join(".", each) for each in os.listdir(".")) if os.path.isdir(name)]' 
100 loops, best of 3: 2.59 msec per loop 
100 loops, best of 3: 2.60 msec per loop 

def listTopDirs(): 
    return [os.path.abspath(name) for name in os.listdir(".") if os.path.isdir(name)] 

$ python -m timeit 'import os;r = [os.path.abspath(name) for name in os.listdir(".") if os.path.isdir(name)]' 
100 loops, best of 3: 4.54 msec per loop 
100 loops, best of 3: 4.54 msec per loop