Каков побочный эффект импорта чего-либо внутри цикла в python? - PullRequest
0 голосов
/ 05 июня 2018

Я веду проект.Я обнаружил, что кто-то написал функцию, в которой он сделал оператор импорта внутри цикла for, например:

for obj in obj_list:
    from Levenshtein._levenshtein import distance
    if distance(obj.title, "some string") <= 2:
        do something

Я предполагаю, что импорт чего-либо внутри цикла for вызывает ненужное выполнение инструкций.Следовательно, я хочу рефакторинг кода.Но для этого мне нужно обоснование, подтверждающее моё предположение, что импорт внутри цикла for не является хорошей практикой.Правильно ли мое предположение?

1 Ответ

0 голосов
/ 05 июня 2018

Просто переместите import из цикла.Вы правы в том, что это заставляет Python выполнять дополнительную работу на каждой итерации.

Оператор Python import делает две вещи:

  • Проверьте, загружен ли уже указанный модуль, иесли нет, загрузите его.
  • Привязать (назначить) одно или несколько имен.

Таким образом, каждая итерация цикла Python проверяет, загружен ли уже модуль (примерно эквивалентно проверке 'Levenshtein._levenshtein' in sys.modules), затем задает имя distance.

При условии ничего другого в цикле устанавливает имя distance на что-либо еще, вы можете безопасно вывести импорт из цикла и сохранитьсами эти чеки тоже.Если такой код существует, то сделайте рефакторинг, чтобы он не использовал то же имя, и перенесите импорт из цикла.

...