Что более эффективно в Python: стандартный импорт или контекстный импорт? - PullRequest
4 голосов
/ 17 ноября 2008

Я заранее извиняюсь, если этот вопрос кажется исправительным.

Что считается более эффективным в Python:

Стандартный импорт

import logging

try:
  ...some code...
exception Exception, e:
  logging.error(e)

... или ...

Контекстный импорт

try:
  ...some code...
exception Exception, e:
  import logging
  logging.error(e)

Ответы [ 5 ]

6 голосов
/ 17 ноября 2008

Контекстный импорт технически более эффективен, но я думаю, что он может создать другие проблемы.

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

3 голосов
/ 17 ноября 2008

Это микрооптимизация. Не беспокойся об этом.

3 голосов
/ 17 ноября 2008

Зависит от того, как часто вы выполняете контекстный импорт.

Оператор import требует проверки наличия модуля, который имеет ненулевую стоимость.

Множество контекстного импорта приведет к снижению производительности, так как простоты не будет. Выгоды очень мало, если только вы не уверены, что импорт будет использоваться редко или никогда.

Контекстный импорт внутри if операторов имеет смысл, особенно когда это делается на верхнем уровне, что означает ровно один раз.

if someConfig:
    import this as bigDeal
else:
    import that as bigDeal
2 голосов
/ 17 ноября 2008

Они по сути одинаковы. Интерпретатор Python будет загружать используемый модуль только один раз , независимо от того, сколько раз вы его импортируете. Изменение местоположения оператора импорта влияет только на то, где привязано имя - например, если ваш оператор import находится внутри функции, имя может использоваться только в этой функции.

Обычно, как правило, импорт выполняется как можно ближе к «вершине» файла.

1 голос
/ 18 ноября 2008

Различия в производительности между этими двумя подходами на практике будут очень небольшими. Я никогда не видел случая, чтобы это имело значение, которое было бы заметно.

Стоит помнить, что интерпретатор python будет выполнять разбор модуля только один раз, когда он импортируется 1-м.

В целом вы получите более обслуживаемый код, просто импортируйте все необходимые модули в верхней части файла.

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