Выполняют ли лямбды параметры функции на каждой итерации?

#python #list #lambda

#python #Список #лямбда

Вопрос:

Я пытаюсь использовать лямбды для применения к функции над списком в python, и мне было интересно, выполняет ли лямбда-выражение, которому передается функция в качестве параметра, этот параметр функции на каждой итерации. Например:

 func = lambda i, min, max: (i - min) / (max - min) 
arr = [func(i, min(arr), max(arr)) for i in arr]
  

Будет ли выполняться этот блок кода min(arr) и max(arr) каждая итерация цикла for? Если это так, это будет означать min(arr) , что и max(arr) вызываются len(arr) раз, что является избыточным. Если это так, было бы лучше просто сохранить min(arr) и max(arr) и передать значение лямбде? Любая помощь будет оценена!

Комментарии:

1. Да, в понимании списка вы пересчитываете min(arr) и max(arr) для каждого элемента; и это сэкономит вашей программе некоторую работу, если вы вместо этого поместите их в переменные.

2. Это не имеет никакого отношения к lambda . Независимо от того, что func было или как вы это определили, min(arr) и max(arr) будет выполняться повторно на каждой итерации понимания списка.

Ответ №1:

Да, в понимании списка вы пересчитываете min(arr) и max(arr) для каждого элемента; и это сэкономит вашей программе некоторую работу, если вы вместо этого поместите их в переменные.

Фактически, вычисление min or max — это операция O (n), поэтому их предварительное вычисление сначала изменяет этот фрагмент кода с O (n2) на O (n).

 imin = min(arr)
imax = max(arr)
arr = [func(i, imin, imax) for i in arr]