Импорт модулей прямо в функцию или class :python

Здрасте, вообще, я не очень давно пишу на Python, поэтому не судите строго за такой вопрос. Я не нашел подобного вопроса или статьи в интернете и решил спросить сам.

def drive_list_func():
    from win32api import GetLogicalDriveStrings

    return GetLogicalDriveStrings()

Можно ли таким образом импортировать модуль прямо в функцию и не по говнокодерски ли это?
Так как это достаточно удобно, ведь он (как я понял) удаляется из памяти после использования функции.


Ответы (2 шт):

Автор решения: n1tr0xs

Так делать можно, но от этого нет пользы, а в придачу вам за такое руки поотбивают. :)

→ Ссылка
Автор решения: MarianD

«Можно ли таким образом импортировать модуль прямо в функцию и не по говнокодерски ли это?»

Можно, но это по «говнокодерски», как вы правильно сказали.
См. «PEP 8 - руководство по написанию кода на Python», часть Импорты:

Импорты всегда помещаются в начале файла, сразу после комментариев к модулю и строк документации, и перед объявлением констант.


«... ведь он (как я понял) удаляется из памяти после использования функции.»

Вы абсолютно прав.
Но оно того не стоит.

Потому что смысл для импорта модуля нет в том, чтоб он что-то делал — хорошо написанный модуль не делает ничего кроме определений функций, классов и переменных-констант.

Значит, он сам не использует много памяти (скажем, 1 KB для 100 строк кода), потому что он сам не вызывает эти функции и не создает объекты этих классов.

(Значит, какая-то маленькая память после импорта использована, но пока вы не вызовете импортованую функцию или не создаете объекты, никакой дополнительной памяти не нужно.)

Потому

  • команды import пишутся в начале программы (модуля) — память не освобождается,
  • функции / классы используются внутри функций — после окончания вызванной функции память освобождается.
→ Ссылка