1

私は関数型プログラミングをしようとして、Python で書かれた Project Euler のコードを時間テストしてきました。次の 2 行のコードの結果は大きく異なりますが、2 行目でこれほど大きな改善が得られた理由は思いつきません...

method1 is run by timeit.Timer.timeit() in 216.869596283 seconds
method2 is run by timeit.Timer.timeit() in 162.596869065 seconds

誰でも私を啓発することができますか?

def method1():
  reduce(lambda x, y: x+y, filter(lambda x: x%3==0 or x%5==0, xrange(1000)))

def method2():
  reduce(lambda x, y: x+y, [x for x in xrange(1000) if x%3==0 or x%5==0])

編集:フィルターは本質的にリスト内包表記よりも遅いことを知っています...理由がわかりませんか?

4

0 に答える 0