Более эффективно использовать «import <module>» или «from <module>import <func>»? - PullRequest
4 голосов
/ 06 декабря 2008

Скажем, мне нужно было только использовать findall () из модуля re, это более эффективно сделать:

from re import findall

или

import re

Есть ли разница в скорости / использовании памяти и т. Д.?

Ответы [ 3 ]

12 голосов
/ 06 декабря 2008

Нет разницы в импорте, однако есть небольшая разница в доступе.

При доступе к функции как

re.findall() 

python должен сначала найти модуль в глобальной области видимости, а затем найти findall в модулях dict. Может иметь значение, если вы вызываете его внутри цикла тысячи раз.

10 голосов
/ 07 декабря 2008

Если есть сомнения, время это:

from timeit import Timer

print Timer("""re.findall(r"\d+", "fg12f 1414 21af 144")""", "import re").timeit()
print Timer("""findall(r"\d+", "fg12f 1414 21af 144")""", "from re import findall").timeit()

Я получаю следующие результаты, используя как минимум 5 повторений по 10 000 000 звонков:

re.findall(): 123.444600105
findall(): 122.056155205

Кажется, есть небольшое преимущество использования findall() напрямую, а не re.findall().

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

>>> Timer("import re").timeit()
2.39156508446
>>> Timer("from re import findall").timeit()
4.41387701035

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

3 голосов
/ 06 декабря 2008

Нет никакой разницы, за исключением того, что имена из re видны в вашем локальном пространстве имен после импорта.

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