2011-01-25 3 views
3

Я новичок здесь и не уверен на 100%, как задать этот вопрос, поэтому я просто буду погружаться прямо. Должен ли я использовать операции импорта в начале каждой функции, которую я пишу которые импортируют все различные модули/функции, которые мне нужны для этой функции? т.е.Объем импортированных модулей/функций в Python

def func1() 
    import os.path 
    print func(2) 
    do something with os.path 

def func2() 
    import os.path 
    do something with os.path 

Будет ли это увеличение памяти накладных расходов или других накладных расходов, или это оператор импорта только отображение локального имени уже загруженного объекта? Есть ли лучший способ сделать это? (Ссылки на учебные пособия и т. Д. Больше всего приветствуются. Я искал какое-то время, но не могу найти хороший ответ на этот вопрос.)

+0

Это дубликат. Первый поиск. Во-вторых. Используйте 'timeit'. Тогда вы обнаружите, что ответ не тратит время на импорт в каждой функции. –

+0

Возможный дубликат [стиль кодирования импорта python] (http://stackoverflow.com/questions/477096/python-import-coding-style) –

+2

@S. Лотт. Вершинный ответ на этот вопрос технически неверен. Я добавил к нему новое. Проблема в том, что используемая методика синхронизации очень ошибочна и не учитывает разницу в стоимости между доступом к локальному и доступом к глобальному. – aaronasterling

ответ

6

Модуль будет обработан только при первом ввозе; последующий импорт будет копировать только ссылку на локальную область. Однако лучший стиль - импортировать в верхней части модуля, когда это возможно; см. PEP 8.

+0

Спасибо за ответы, именно то, что я хотел знать! Извините за какое-то время, я искал довольно долгое время; Я не знаю, что это за время, но я узнаю. Ура! – GlenS

+0

И спасибо за указатель на PEP 8. – GlenS

+0

@GlenS: Изучите PEP8. Чем раньше вы это сделаете, тем скорее ваш код будет выглядеть правильно для других кодов Python. – mlissner

10

Usually все импортные товары размещаются в начале файла. Импорт модуля в корпус функции будет import только в этой области:

def f(): 
    import sys 
    print 'f', sys.version_info 

def g(): 
    print 'g', sys.version_info 

if __name__ == '__main__': 
    f() # will work 
    g() # won't work, since sys hasn't been imported into this modules namespace 
Смежные вопросы