не делает никакой привязки имени, как свидетельствует байт-код.

родолжение вопросаИспользование встроенного__import__() в нормальных случаяхЯ провел несколько тестов и наткнулся на удивительные результаты.

Я здесь сравниваю время исполнения классическогоimport заявление и вызов__import__ встроенная функция. Для этого я использую следующий скрипт в интерактивном режиме:

import timeit   

def test(module):    
    t1 = timeit.timeit("import {}".format(module))
    t2 = timeit.timeit("{0} = __import__('{0}')".format(module))
    print("import statement:   ", t1)
    print("__import__ function:", t2)
    print("t(statement) {} t(function)".format("<" if t1 < t2 else ">"))

Как и в связанном вопросе, вот сравнение при импортеsysнаряду с некоторыми другими стандартными модулями:

>>> test('sys')
import statement:    0.319865173171288
__import__ function: 0.38428380458522987
t(statement) < t(function)

>>> test('math')
import statement:    0.10262547545597034
__import__ function: 0.16307580163101054
t(statement) < t(function)

>>> test('os')
import statement:    0.10251490255312312
__import__ function: 0.16240755669640627
t(statement) < t(function)

>>> test('threading')
import statement:    0.11349136644972191
__import__ function: 0.1673617034957573
t(statement) < t(function)

Все идет нормально,import быстрее чем__import__(), Это имеет смысл для меня, потому что, как я написал в связанном посте, я считаю логичным, чтоIMPORT_NAME Инструкция оптимизирована по сравнению сCALL_FUNCTIONкогда последний приводит к вызову__import__.

Но когда дело доходит до менее стандартных модулей, результаты меняются:

>>> test('numpy')
import statement:    0.18907936340054476
__import__ function: 0.15840019037769792
t(statement) > t(function)

>>> test('tkinter')
import statement:    0.3798560809537861
__import__ function: 0.15899962771786136
t(statement) > t(function)

>>> test("pygame")
import statement:    0.6624641952621317
__import__ function: 0.16268579177259568
t(statement) > t(function)

В чем причина такой разницы во времени исполнения? Какова реальная причина, почемуimport утверждение быстрее на стандартных модулях? С другой стороны, почему__import__ работать быстрее с другими модулями?

Тесты проводят с Python 3.6

Ответы на вопрос(3)

Ваш ответ на вопрос