Импорт модулей прямо в функцию или class :python
Здрасте, вообще, я не очень давно пишу на Python, поэтому не судите строго за такой вопрос. Я не нашел подобного вопроса или статьи в интернете и решил спросить сам.
def drive_list_func():
from win32api import GetLogicalDriveStrings
return GetLogicalDriveStrings()
Можно ли таким образом импортировать модуль прямо в функцию и не по говнокодерски ли это?
Так как это достаточно удобно, ведь он (как я понял) удаляется из памяти после использования функции.
Ответы (2 шт):
Так делать можно, но от этого нет пользы, а в придачу вам за такое руки поотбивают. :)
«Можно ли таким образом импортировать модуль прямо в функцию и не по говнокодерски ли это?»
Можно, но это по «говнокодерски», как вы правильно сказали.
См. «PEP 8 - руководство по написанию кода на Python», часть Импорты:
Импорты всегда помещаются в начале файла, сразу после комментариев к модулю и строк документации, и перед объявлением констант.
«... ведь он (как я понял) удаляется из памяти после использования функции.»
Вы абсолютно прав.
Но оно того не стоит.
Потому что смысл для импорта модуля нет в том, чтоб он что-то делал — хорошо написанный модуль не делает ничего кроме определений функций, классов и переменных-констант.
Значит, он сам не использует много памяти (скажем, 1 KB для 100 строк кода), потому что он сам не вызывает эти функции и не создает объекты этих классов.
(Значит, какая-то маленькая память после импорта использована, но пока вы не вызовете импортованую функцию или не создаете объекты, никакой дополнительной памяти не нужно.)
Потому
- команды
importпишутся в начале программы (модуля) — память не освобождается, - функции / классы используются внутри функций — после окончания вызванной функции память освобождается.