find

なんかこう、ひとこと書きたくなるという点で PyTest さんは良いな。
まぁ、Ruby ならもっと簡単。shiro さんのコメントの通りというか PyTest さんも思っているようだが、言語云々よりライブラリの話だなぁ。

% ruby -rfind -e "Find.find('.') {|path| puts path}"

ついでに言えば無理やり map を使っているので、無駄なリストが生成されるのが気にならないでもない。そもそも、1行でということ自体にあまり意味はないのであるが。
あとまぁ、関数プログラミング的な話で言えば、ツリーを traverse する高階関数を用意するとかのほうがいいのではないかと思った。この変は generator とか遅延評価とかあると多少やりやすい。

import sys
import os

def traverse(obj, enum):
    yield obj

    for child in enum(obj):
        for element in traverse(child, enum):
            yield element


def find(path):
    def enum(path):
        if os.path.isdir(path):
            return [os.path.join(path, child) for child in os.listdir(path)]
        else:
            return ()

    return traverse(path, enum)

if __name__ == '__main__':
    if len(sys.argv) > 1:
        path = sys.argv[1]
    else:
        path = os.getcwd()

    for e in find(path):
        print e

あぁ、今気づいたが、ディレクトリがリストアップされないという点においてそれ find 違うというツッコミもあるな。