高次関数を使用しています& Lambdasは実行時間を&にするとメモリの効率は良くなるか悪くなりますか? 例えば、リスト内のすべての数値を乗算する:高次関数vsループ - 実行時間とメモリ効率?
nums = [1,2,3,4,5]
prod = 1
for n in nums:
prod*=n
VS
prod2 = reduce(lambda x,y:x*y , nums)
はHOFバージョンは、それがコードの少ない行をだ以外ループバージョン上の任意の利点を持っている/機能的アプローチを使用?
EDIT:
私は私が必要との評判を持っていないような答えとしてこれを追加することはできませんよ。私は@DSM
def test1():
s= """
nums = [a for a in range(1,1001)]
prod = 1
for n in nums:
prod*=n
"""
t = timeit.Timer(stmt=s)
return t.repeat(repeat=10,number=100)
def test2():
s="""
nums = [a for a in range(1,1001)]
prod2 = reduce(lambda x,y:x*y , nums)
"""
t = timeit.Timer(stmt=s)
return t.repeat(repeat=10,number=100)
によって示唆されているようにはtimeitを使用してループ& HOFのアプローチをプロファイリングするために結ばれ、これが私の結果である :
Loop:
[0.08340786340144211, 0.07211491653462579, 0.07162720686361926, 0.06593182661083438, 0.06399049758613146, 0.06605228229559557, 0.06419744588664211, 0.0671893658461038, 0.06477527090075941, 0.06418023793167627]
test1 average: 0.0644778902685
HOF:
[0.0759414223099324, 0.07616920129277016, 0.07570730355421262, 0.07604965128984942, 0.07547092059389193, 0.07544737286604364, 0.075532959799953, 0.0755039779810629, 0.07567424616704144, 0.07542563650187661]
test2 average: 0.0754917512762
平均ループアプローチではHOFsを使用するよりも速くなるようです。
あなたははtimeitモジュールに精通していますか?自分でパフォーマンスをテストできます。 – DSM
いいえ、私はそれに精通していません。私はtimeitのためにgoogleします。私はそれがプロファイリングツールだと思います。しかし、理論的な見地からHOFの利点を知りたいと思っています。 – Bharat
@RBK問題は、理論上のパースペクティブがあなたの質問(ランニングタイムとメモリ効率)に答えないことです。 – Icarus