Во многих модулях можно встретить конструкцию вида:
if __name__ == "__main__": func()
Её основное назначение — разделение кода, который будет выполнятся при вызове кода как модуля (при импортировании его в другой скрипт) — и при запуске самого модуля, как отдельного файла.
Возьмём такой пример.
Скрипт 1:
#!/usr/bin/env python print('Script 1. My name is: %s' % __name__) print('This is simple code from script 1') def func(): print('This is code from function from script 1') if __name__ == "__main__": func()
И Скрипт 2:
#!/usr/bin/env python print('Script2. My name is: %s' % __name__) print('Importing ifname1') import ifname1
Результат выполнения Скрипта 2:
[simterm]
$ ./ifname2.py Script2. My name is: __main__ Importing ifname1 Script 1. My name is: ifname1 This is simple code from script 1
[/simterm]
И запуск Скрипта 1 отдельно:
[simterm]
$ ./ifname1.py Script 1. My name is: __main__ This is simple code from script 1 This is code from function from script 1
[/simterm]
Ещё один наглядный пример.
Скрипт 1:
#!/usr/bin/env python if __name__ == "__main__": print('I am running as an independent program with name = %s' % __name__) else: print('I am running as an imported module with name = %s' % __name__)
И Скрипт 2 — без изменений:
#!/usr/bin/env python print('Script2. My name is: %s' % __name__) print('Importing ifname1') import ifname1
Запуск Скрипта 2 даст такой результат:
[simterm]
$ ./ifname2.py Script2. My name is: __main__ Importing ifname1 I am running as an imported module with name = ifname1
[/simterm]
Тогда как прямой вызов Скрипта 1 — такой:
[simterm]
$ ./ifname1.py I am running as an independent program with name = __main__
[/simterm]