Что происходит во время вызова if __name__ == "__main__":? # Threading example import time, thread def myfunction(string, sleeptime, lock, *args): while 1: lock.acquire() time.sleep(sleeptime) lock.release() time.sleep(sleeptime) if __name__ == "__main__": lock = thread.allocate_lock() thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock)) thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock)) Перевод вопроса «What does if __name__ == “__main__” do?» @Devoted.
Ответ Когда интерпретатор Python читает исходный файл, он исполняет весь найденный в нем код. Перед тем, как начать выполнять команды, он определяет несколько специальных переменных. Например, если интерпретатор запускает некоторый модуль (исходный файл) как основную программу, он присваивает специальной переменной __name__ значение "__main__". Если этот файл импортируется из другого модуля, переменной __name__ будет присвоено имя этого модуля. В случае с вашим сценарием, предположим, что код исполняется как основная функция, например: python threading_example.py После задания специальный переменных интерпретатор выполнит инструкцию import и загрузит указанные модули. Затем он проанализирует блок def, создаст объект-функцию и переменную под названием myfunction, которая будет указывать на этот объект. Затем он прочтет инструкцию if, «поймёт», что __name__ эквивалентен "__main__", и выполнит указанный блок. Одна из причин делать именно так – тот факт, что иногда вы пишете модуль (файл с расширением .py), предназначенный для непосредственного исполнения. Кроме того, он также может быть импортирован и использован из другого модуля. Производя подобную проверку, вы можете сделать так, что код будет исполняться только при условии, что данный модуль запущен как программа, и запретить исполнять его, если его хотят импортировать и использовать функции модуля отдельно. Дополнительно см. эту страницу. Что означает "threading_example в данный момент импортируется из другого модуля"? Это означает, что кем-то в каком-либо файле .py (или в ходе интерактивной Python-сессии) используется выражение import threading_example. Противоположный этому случай – пользователь использует выражение python threading_example.py или ./threading_example.py, и т. д. В последнем случае, threading_example.py запущен как основная программа. В первом же случае он запущен как-то иначе (чтобы понять, ищите вызов вида import threading_example). Перевод ответа «What does if __name__ == “__main__” do?» @Mr Fooz.