2013-04-27 3 views
2

Я импортирую часть модуля вместо цельной точки, потому что меня интересует ускорение моего скрипта.Что действительно происходит, когда модули импортируются?

У меня есть файл с именем theFile.py

def goza(): 
    print vari 
    funct() 

vari = "called variable" 

def funct(): 
    print "CALLED FUNCTION" 

something_else = 12 

Я, если в моей основной:

from theFile import goza 

А затем запустить Goza() Это действительно имеет переменную Вари и функцию FucT. Это означает, что, если я импортировать:

from theFile import goza 

Это фактически импортировать весь модуль? Но единственная переменная, которую легко получить, - goza? Как импортировать только часть кода, как я ожидал? (что если я что-то сделаю из импорта фида и использую goza, , который будет ошибкой, говорит, что нет функции переменной и функции функции).

спасибо!

+0

Вы ввели ту же строку 'from the fille import goza' дважды. –

ответ

2

Не беспокойтесь об этом.

Я почти уверен, что весь модуль скомпилирован в байт-код, а затем читается в памяти, независимо. Различные операторы import имеют отношение только к тем, какие классы/функции/переменные вводятся в глобальную область.

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

+0

Не просто скомпилирован до байт-кода - модуль _executed_ в полном объеме. Вы можете увидеть это, добавив в свой модуль инструкцию 'print' верхнего уровня. Кроме того, если у него есть связанный файл '.pyc', он не скомпилирован (потому что он уже был). –

+0

@poorsod Он перекомпилирован, хотя файл '.py' новее, чем' .pyc'. –

2

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

Если есть части вашего модуля, который вы хотели бы выполнить только, когда он запускается как сценарий, но не во время импорта, то идиома использовать:

def main(): 
    code_here 

if __name__ == "__main__": 
    main() 

т.е.

def goza(): 
    print vari 
    funct() 

def main(): 
    vari = "called variable" 

    def funct(): 
     print "CALLED FUNCTION" 

    something_else = 12 

if __name__ == "__main__": 
    main() 

см. http://docs.python.org/2/library/main.html

Смежные вопросы