Выражение или функция в качестве аргумента функции диапазона

#python

Вопрос:

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

 l = len(some_array) for i in range(l):  ...  

или

 for i in range(len(some_array)):  ...  

это быстрее? Кроме того, то же самое относится и к enumerate()?

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

1. Нет, функция будет оценена только один раз. Всегда используйте клизму

2. Второй способ немного быстрее (так как ему не нужно хранить и загружать переменную).

Ответ №1:

Код range(len(some_array)) создает range экземпляр объекта-генератора, затем выдает его значения, len вычисляется один раз и передается в range

Чтобы выполнить итерацию по структуре и получить также позицию, используйте enumarate , у вас уже есть доступные индекс и значение, и вам не нужно вычислять длину

 for i, value in enumerate(some_array):  pass