Форум сайта python.su
Очень часто начал видеть такую конструкцию в python коде.
if __name__ == "__main__" : main()
Офлайн
Если вы запускаете вашу программу скриптом, то есть:
$ python my_script.py
Офлайн
Для Windows актуально?Запускаю не из консоли.
Офлайн
regall
Не очень поняла…
вот если мы импортируем какой-то модуль, ты мы используем его куски/объекты из него, но не запускаем весь модуль
или я что-то не так понимаю с импортированием?
Офлайн
Alala
код, который находится в общей области видимости, при импортировании исполняется. В случае с пакетом - исполняется код, который находится в __init__.py в папке пакета.
Офлайн
AlalaВообще говоря мы его весь и исполняем. Потому что именно исполнение инструкций def, class и т.д. создает их как объекты типа “функция”, “класс” соответственно.
regall
Не очень поняла…
вот если мы импортируем какой-то модуль, ты мы используем его куски/объекты из него, но не запускаем весь модуль
или я что-то не так понимаю с импортированием?
if __name__ == "__main__" : main()
Отредактировано (Авг. 31, 2011 15:54:53)
Офлайн
#!/usr/bin/python
import sys
try:
import cgitb
cgitb.enable()
except ImportError:
sys.stderr = sys.stdout
def cgiprint(inline=''):
sys.stdout.write(inline)
sys.stdout.write('\r\n')
sys.stdout.flush()
contentheader = 'Content-Type: text/html'
thepage = '''<html><head>
<title>%s</title>
</head><body>
%s
</body></html>
'''
h1 = '<h1>%s</h1>'
if __name__ == '__main__':
cgiprint(contentheader) # заголовок вывода
cgiprint() # обязательная пустая строка для отделения заголовка от выводимых данных
title = 'Hello World'
headline = h1 % 'Hello, world!'
print thepage % (title, headline) # вывод кода html .
Офлайн
При импорте код выделенный красным выполнен не будет. При выполнении этого скрипта через “python скрипт.py” он будет выполнен весь.
#!/usr/bin/python
import sys
try:
import cgitb
cgitb.enable()
except ImportError:
sys.stderr = sys.stdout
def cgiprint(inline=''):
sys.stdout.write(inline)
sys.stdout.write('\r\n')
sys.stdout.flush()
contentheader = ‘Content-Type: text/html’
thepage = ‘'’<html><head>
<title>%s</title>
</head><body>
%s
</body></html>
'''
h1 = ‘<h1>%s</h1>’
if __name__ == ‘__main__’:
cgiprint(contentheader) # заголовок вывода
cgiprint() # обязательная пустая строка для отделения заголовка от выводимых данных
title = ‘Hello World’
headline = h1 % ‘Hello, world!’
print thepage % (title, headline) # вывод кода html .
Офлайн
Попробую другими словами объяснить, как я сам на днях это понял.
При импорте кода из данного модуля значение __name__ будет иметь имя того модуля, в который импортируется содержимое этого. Значит код под условием выполняться не будет. Если запустить на выполнение сам этот файл, то условие if __name__ == ‘__main__’: выполнится.
Как пример, вот написал я програмульку, которая перебирая последовательные порты ищет на одном из них присутствия некоего устройства. Обращаясь к этому модулю из другой программы мне от него нужно только порт или None, больше ничего. А под сабжевое условие запихнул вывод отладочной информации и, запустив на выполнение непосредственно этот модуль, можно увидеть в подробностях как оно работает со всеми подробностями. Что полезно для отладки.
Офлайн
Я так понял что программа которая импортирует - примет переменные , данные всякие . Но не будет выполнять функции из импортируемого модуля , не будет выполнять действий?Коряво конечно изъясняюсь .
Офлайн