Почему все модули работают вместе? - PullRequest
2 голосов
/ 20 июня 2011

Я только что сделал свежую копию eclipse и установил pydev.

В моей первой пробе использования pydev с eclipse я создал 2 модуля в пакете src (по умолчанию)

FirstModule.py:

'''
Created on 18.06.2009

@author: Lars Vogel
'''
def add(a,b):
    return a+b

def addFixedValue(a):
    y = 5
    return y +a

print "123"

run.py:

'''
Created on Jun 20, 2011

@author: Raymond.Yeung
'''
from FirstModule import add

print add(1,2)
print "Helloword"

Когда я вынимаю выпадающее меню кнопки запуска и нажимаю «ProjectName run.py», здесьрезультат:

123
3
Helloword

Очевидно, что оба модуля работали, почему?Это настройка по умолчанию?

1 Ответ

10 голосов
/ 20 июня 2011

Когда вы импортируете модуль, все в нем «запускается». Это означает, что классы и функциональные объекты создаются, устанавливаются глобальные переменные и выполняются операторы печати. *)

Обычной практикой является включение операторов, предназначенных только для выполнения, когда модуль запускается напрямую , в блок if, такой как этот:

if __name__ == "__main__":
    print "123"

Теперь, если вы запустите модуль как скрипт, __name__ будет установлен на "__main__", поэтому будет напечатано "123". Однако, если вы импортируете модуль откуда-то еще, __name__ в вашем случае будет "FirstModule", а не "__main__", поэтому все, что находится в блоке, не будет выполнено.

*) Обратите внимание, что если вы снова импортируете тот же модуль, он будет , а не снова «запускаться». Python отслеживает импортированные модули и просто повторно использует уже импортированный модуль во второй раз. Это делает трюки C / C ++ такими, как вложение тела файла заголовка с помощью операторов IFNDEF, чтобы убедиться, что заголовок импортируется только один раз в python.

...