Стиль кодирования импорта Python - PullRequest
62 голосов
/ 25 января 2009

Я обнаружил новый паттерн. Хорошо ли известен этот образец или каково его мнение?

По сути, мне трудно перебирать исходные файлы вверх и вниз, чтобы выяснить, какие модули импорта доступны и т. Д., Теперь вместо

import foo
from bar.baz import quux

def myFunction():
    foo.this.that(quux)

Я перемещаю все свои операции импорта в функцию, в которой они фактически используются. Например:

def myFunction():
    import foo
    from bar.baz import quux

    foo.this.that(quux)

Это делает несколько вещей. Во-первых, я редко случайно загрязняю свои модули содержимым других модулей. Я мог бы установить переменную __all__ для модуля, но тогда мне пришлось бы обновлять ее по мере развития модуля, и это не помогает загрязнению пространства имен для кода, который фактически живет в модуле.

Во-вторых, я редко сталкиваюсь со списком импортных товаров в верхней части моих модулей, половина или больше которых мне больше не нужны, потому что я реорганизовал их. Наконец, я нахожу этот шаблон НАМНОГО проще для чтения, поскольку каждое упомянутое имя находится прямо в теле функции.

Ответы [ 11 ]

0 голосов
/ 08 мая 2016

Реализации безопасности

Рассмотрим среду, в которой весь ваш код Python находится в папке, к которой имеет доступ только привилегированный пользователь. Чтобы избежать запуска всей вашей программы как привилегированного пользователя, вы решаете сбросить привилегии непривилегированному пользователю во время выполнения. Как только вы используете функцию, которая импортирует другой модуль, ваша программа выдаст ImportError, так как непривилегированный пользователь не может импортировать модуль из-за прав доступа к файлу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...