Функции высшего порядка против циклов - время работы и эффективность памяти?

Использование функций высшего порядка и ламбдас улучшает или ухудшает время работы и эффективность использования памяти? Например, для перемножения всех чисел в списке :

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:

Я не могу добавить это в качестве ответа, так как у меня нет необходимой репутации. Я попробовал профилировать цикл и HOF подход, используя timeit, как предложил @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) 

И вот мой результат:

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

В среднем цикл подход кажется быстрее, чем использование HOF.

8
задан Bharat 28 January 2012 в 02:32
поделиться