Форум сайта python.su
0
начав изучать питон, я увидел множество примеров, в которых инклудят модуль, или даже отдельную функцию лишь в месте её использования
например:
def test():
from time import sleep
time.sleep(1)
Отредактировано (Фев. 9, 2011 09:56:53)
Офлайн
14
Привыкать - не нужно. Применять только в том случае, если иначе - никак.
Офлайн
3
Андрей СветловИногда такое применяется, например, в написании тестов. Разработчики пирамиды сами рекомендуют внутри сетапа импортить необходимые модули.
Привыкать - не нужно. Применять только в том случае, если иначе - никак.
Андрей Светлов
иначе - никак.
Офлайн
0
спасибо. я тоже больше склонялся к тому, что не стоит
Офлайн
2
Хочу отметить что это всё-таки не тупой инклюд как в других языках, а настоящий импорт некого имени в локальное пространство имен.
Офлайн
14
Ага. С (возможным) исполнением кода модуля, обязательной блокировкой и прочими занятными вкусностями.
Офлайн
32
Александр Кошелевв локальное пространство, но он не создает копию модуля, а использует ранее загруженную копию, и не исполняет её повторно (если это не стартовый модуль)
Хочу отметить что это всё-таки не тупой инклюд как в других языках, а настоящий импорт некого имени в локальное пространство имен.
Офлайн
14
Блокировка берется всегда. И это главная (хоть и небольшая) затрата времени на импорт модуля, уже присутствующего в sys.modules.
Офлайн
14
Да и сколько можно наступать на одни грабли?
Есть два метода:
- правильный, хороший и быстрый
- тоже работает в подавляющем большинстве случаев. Если повезет - вы никогда не увидите темную сторону.
Ваш выбор?
Офлайн
32
Андрей Светлов
Блокировка берется всегда. И это главная (хоть и небольшая) затрата времени на импорт модуля, уже присутствующего в sys.modules.
def test():
import datetime
def test2():
pass
col = 1000000
from timeit import Timer
t = Timer("test()", "from __main__ import test")
t1 = t.timeit(number=col)
t = Timer("test2()", "from __main__ import test2")
t2 = t.timeit(number=col)
print t1,t2, (t1-t2)/col
1.08207988739 0.158288002014 9.23791885376e-07
Офлайн