Сергей Акинфиев
апрель 2019.
4738

Объясните, пожалуйста, на пальцах суть конструкции if __name__ == "__main__" в Python'е?

Ответить
Ответить
Комментировать
0
Подписаться
1
3 ответа
Поделиться

Я не большой знаток питона, но как я понимаю:

Файл фу.py

#эти функции станут доступны, если написать import фу

def мояфункция(аргументы):

что-то полезное.

...

print ("Эта команда будет выполнена и если написать import фу из другого файла, и если написать python фу.py на коммандной линии. Может мы этого не хотим.")

if name == 'main':

print ("Эта команда НЕ будет выполнена если написать import фу из другого файла, а будет только если написать python фу.py на коммандной линии. Может мы так хотим.")

7
0

Ага, то есть даже если мы импортируем некий модуль (фу.ру), но ниже введем конструкцию 'if-name-main', то он НЕ будет исполняться до тех пор, пока мы лично не введем пальцами его название в командной строке?

0
Ответить

Да, линии под ifом выполнятся во втором случае, но не в первом. Если не волноваться, что будет, если импортировать файл, то можно и не возиться с ifом.

+1
Ответить

Вроде догнал. Попытаюсь сам себе объяснить. 

Допустим, мы создали программу, позволяющую человеку найти себе подходящего партнера для отношений. У нас есть программа, в которую импортированы два модуля: один, на основании введенных данных, определяет знак зодиака (zodiac.py), а второй - знак гороскопа (horoscope.py). И тот, и другой проводят вычисления, которые выводятся в буфер. Но нам не нужно знать, что именно они получают в итоге, нам не нужен выведенный на экран результат этих двух модулей. 

Нам нужно знать только один результат - результат основного модуля (назовем его pair.py), а он-то, на основе тех двух, собственно сравнивает данные двух человек и выдает "подходит" или "не подходит". Так?

0
Ответить

Я считаю данный ответ сомнительным.

0
Ответить
Прокомментировать

Начал изучать python самостоятельно, дошел до этой конструкции и, хоть убейте, не могу понять, зачем она нужна. Смешно говорить, но тупо не могу понять, о чем речь. 

Если мы импортируем модуль, разве нам не нужно его выполнение? 

И в чём тогда разница между импортом модуля и его запуском?

0
0

Вы можете сверху в модуле написать кучу функций, классов и т.п., а под if name == "main" написать несколько инструкций для проверки этих функций, или чтобы они делали что-нибудь полезное для вас в данный момент. А при импорте этого модуля в другом модуле вам будут нужны только эти классы и функции, но не инструкции под if'ом. Ну это как вариант.

+2
Ответить

Всё, спасибо, теперь догнал)))))))))))

0
Ответить
Прокомментировать

Очень просто, это условие означает: если переменная name имеет значение "main".

овоатвлсоутствоствлсовььктслвтьпюадвдатаьслвьтуталмотыцджалстыдсшвтвжмдытжмлвтсдвтадмтвлмтаьмлатмлыьутслвта (это лучше чем писать что-то якобы связное)

0
-3

Вы явно не поняли вопроса.

0
Ответить

Так и есть.

0
Ответить
Прокомментировать
Ответить
Читайте также на Яндекс.Кью
Читайте также на Яндекс.Кью