Что делать, если name = = "main": do?
Что значит if __name__ == "__main__":
сделать?
# Threading example
import time, thread
def myfunction(string, sleeptime, lock, *args):
while True:
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))
29 ответов
когда интерпретатор Python читает исходный файл, он выполняет весь найденный в нем код.
перед выполнением кода он определит несколько специальных переменных. Например, если интерпретатор Python работает этот модуль (исходный файл) в качестве основной программы, он устанавливает специальный __name__
переменная имеет значение "__main__"
. Если этот файл импортируется из другого модуля, __name__
будет установлено имя модуля.
в случае вашего сценария, предположим, что он выполняется как основная функция, например, вы сказали что-то вроде
python threading_example.py
в командной строке. После настройки специальных переменных он выполнит import
оператор и загрузите эти модули. Затем он будет оценивать def
блок, создание объекта функции и создание переменной с именем myfunction
, который указывает на объект function. Затем он будет читать if
заявление и увидев, что __name__
равен "__main__"
, поэтому он выполнит блок там показано.
одна из причин этого заключается в том, что иногда вы пишете модуль (a .py
file), где он может быть выполнен непосредственно. Альтернативно, его можно также импортировать и использовать в другом модуле. Выполняя основную проверку, вы можете выполнить этот код только тогда, когда вы хотите запустить модуль как программу, а не когда кто-то просто хочет импортировать ваш модуль и вызвать ваши функции самостоятельно.
посмотреть на этой странице для некоторых дополнительных подробности.
когда ваш скрипт запускается, передавая его в качестве команды интерпретатору Python,
python myscript.py
выполняется весь код, который находится на уровне отступа 0. Функции и классы, которые определены, хорошо определены, но ни один из их кода не запускается. В отличие от других языков, нет main()
функция, которая запускается автоматически -main()
функция неявно весь код на верхнем уровне.
в этом случае код верхнего уровня является if
блок. __name__
-это встроенная переменная, которая возвращает имя текущего модуля. Однако, если модуль запускается напрямую (как в myscript.py
выше), то __name__
вместо строка "__main__"
. Таким образом, вы можете проверить, запускается ли ваш скрипт напрямую или импортируется чем-то другим, Протестировав
if __name__ == "__main__":
...
если ваш скрипт импортируется в другой модуль, его различные функции и определения классов будут импортированы, а его код верхнего уровня будет выполняется, но код в тело if
предложение выше не будет запускаться, поскольку условие не выполняется. В качестве основного примера рассмотрим следующие два сценария:
# file one.py
def func():
print("func() in one.py")
print("top-level in one.py")
if __name__ == "__main__":
print("one.py is being run directly")
else:
print("one.py is being imported into another module")
# file two.py
import one
print("top-level in two.py")
one.func()
if __name__ == "__main__":
print("two.py is being run directly")
else:
print("two.py is being imported into another module")
теперь, если вы вызываете интерпретатор как
python one.py
выход будет
top-level in one.py
one.py is being run directly
если вы запустите two.py
вместо:
python two.py
вы получаете
top-level in one.py
one.py is being imported into another module
top-level in two.py
func() in one.py
two.py is being run directly
таким образом, когда модуль one
загружается, его __name__
равна "one"
вместо "__main__"
.
самое простое объяснение __name__
переменная (imho) следующая:
создайте следующие файлы.
# a.py
import b
и
# b.py
print "Hello World from %s!" % __name__
if __name__ == '__main__':
print "Hello World again from %s!" % __name__
запуск их даст вам этот вывод:
$ python a.py
Hello World from b!
как вы можете видеть, при импорте модуля Python устанавливает globals()['__name__']
в этом модуле к имени модуля.
$ python b.py
Hello World from __main__!
Hello World again from __main__!
как вы можете видеть, при выполнении файла Python устанавливает globals()['__name__']
в этом файле "__main__"
.
что значит
if __name__ == "__main__":
делать?
изложить основы:
глобальная переменная
__name__
, в модуле, который является точкой входа в вашу программу, является'__main__'
. В противном случае это имя, под которым вы импортируете модуль.Итак, код под
if
блок будет работать только если модуль является точкой входа в вашу программу.оно позволяет коду в модуле к быть импортируемым другими модулями, без выполнения блока кода ниже при импорте.
зачем нам это надо?
разработка и тестирование кода
скажем, вы пишете скрипт Python, предназначенный для использования в качестве модуля:
def do_important():
"""This function does something very important"""
вы мог бы проверьте модуль, добавив этот вызов функции в нижней части:
do_important()
и работает он (в командной строке) с чем-то например:
~$ python important.py
Проблема
, если вы хотите импортировать модуль в другой скрипт:import important
при импорте do_important
функция будет вызвана, поэтому вы, вероятно, прокомментируете свой вызов функции,do_important()
внизу.
# do_important() # I must remember to uncomment to execute this!
и тогда вам придется вспомнить, прокомментировали ли вы свой вызов тестовой функции. И эта дополнительная сложность будет означать, что вы, скорее всего, забудете, сделав свое развитие процесс более хлопотный.
Лучше
на __name__
переменная указывает на пространство имен, где интерпретатор Python находится в данный момент.
внутри импортированного модуля, это имя этого модуля.
но внутри основного модуля (или интерактивного сеанса Python, т. е. чтения интерпретатора, Eval, цикла печати или REPL) вы запускаете все из его "__main__"
.
так если вы проверяете раньше выполнение:
if __name__ == "__main__":
do_important()
с вышеизложенным ваш код будет выполняться только при запуске его в качестве основного модуля (или намеренно вызывать его из другого скрипта).
Еще Лучший Способ
есть Питонический способ улучшить это, хотя.
что делать, если мы хотим запустить этот бизнес-процесс вне модуля?
если мы помещаем код, который мы хотим использовать при разработке и тестировании в такой функции, а затем делаем проверьте на '__main__'
сразу после:
def main():
"""business logic for when running this module as the primary one!"""
setup()
foo = do_important()
bar = do_even_more_important(foo)
for baz in bar:
do_super_important(baz)
teardown()
# Here's our payoff idiom!
if __name__ == '__main__':
main()
теперь у нас есть конечная функция для конца нашего модуля, которая будет работать, если мы запустим модуль в качестве основного модуля.
это позволит импортировать модуль и его функции и классы в другие скрипты без запуска main
функция, а также позволит модулю (и его функциям и классам) вызываться при запуске из другого , т. е.
import important
important.main()
эта идиома также может быть найдена в документации Python в объяснении __main__
модуль. этот текст гласит:
этот модуль представляет (иначе анонимную) область, в которой основная программа интерпретатора выполняется-команды читаются либо из стандартный ввод из файла сценария или из интерактивных запросов. Он является ли эта среда, в которой идиоматический" условный сценарий " строфа вызывает сценарий для запуска:
if __name__ == '__main__': main()
if __name__ == "__main__"
- Это часть, которая запускается, когда скрипт запускается из (скажем) командной строки с помощью команды python myscript.py
.
что значит
if __name__ == "__main__":
делать?
__name__
является глобальной переменной (в Python global фактически означает уровне модуля), которая существует во всех пространствах имен. Обычно это имя модуля (как str
type).
как единственный частный случай, однако, в любом процессе Python вы запускаете, как в mycode.py:
python mycode.py
в противном случае анонимному глобальному пространству имен присваивается значение '__main__'
в своем __name__
.
таким образом, в том числе последние строки
if __name__ == '__main__':
main()
- в конце вашего mycode.py сценарий,
- когда это основной модуль точки входа, который запускается процессом Python,
приведет к уникальному определению вашего скрипта main
функция для запуска.
еще одно преимущество использования этой конструкции: вы также можете импортировать ваш код как модуль в другой скрипт, а потом запустить основную функцию если и когда ваша программа решает:
import mycode
# ... any amount of other code
mycode.main()
здесь много разных подходов к механике рассматриваемого кода, "Как", но для меня ничто из этого не имело смысла, пока я не понял"почему". Это должно быть особенно полезно для начинающих программистов.
взять файл "ab.py":
def a():
print('A function in ab file');
a()
и второй файл "xy.py":
import ab
def main():
print('main function: this is where the action is')
def x():
print ('peripheral task: might be useful in other projects')
x()
if __name__ == "__main__":
main()
что на самом деле делает этот код?
при выполнении xy.py
, вы import ab
. Оператор import модуль сразу по импорту, так что ab
операции выполняются до того, как остальная часть xy
. После того, как закончил с ab
на xy
.
интерпретатор отслеживает, какие скрипты выполняются с помощью __name__
. Когда вы запускаете сценарий - независимо от того, как вы его назвали - интерпретатор называет его "__main__"
, что делает его основным или "домашним" скриптом, который возвращается после запуска внешнего скрипта.
любой другой скрипт, который вызывается из этого "__main__"
скрипту присваивается его имя файла как его __name__
(например, __name__ == "ab.py"
). Следовательно, линия if __name__ == "__main__":
- это тест интерпретатора, чтобы определить, интерпретирует ли он / анализирует сценарий "home", который был первоначально выполнен, или если он временно заглядывает в другой (внешний) скрипт. Это дает программисту гибкость, чтобы сценарий вел себя по-разному, если он выполняется непосредственно против внешнего вызова.
давайте пройдем через приведенный выше код, чтобы понять, что происходит, фокусируясь сначала по неиндентированным строкам и порядку их появления в скриптах. Запомните эту функцию-или def
- блоки ничего не делают сами по себе, пока их не вызовут. Что бы сказал переводчик, если бы пробормотал про себя:--34-->
- открыть xy.py как "домашний" файл; назовите его
"__main__"
на__name__
переменной. - импортировать и открыть файл с помощью
__name__ == "ab.py"
. - о, функция. Я запомню это.
- Ok, функция
a()
; я только что узнал что. Печать'функция в файле ab'. - конец файла; вернуться к
"__main__"
! - о, функция. Я запомню это.
- еще один.
- функции
x()
; ok, печать'периферийная задача: может быть полезно в других проектах'. - что это? Ан
if
заявление. Ну, условие выполнено (переменная__name__
установлено в"__main__"
), поэтому я войду вно код работает и без него
Да, правильно. Эти отдельные функции можете вызывается из встроенного скрипта, который не содержится внутри
когда в нашем модуле есть определенные утверждения (M.py
) мы хотим быть выполнены, когда он будет работать как main (не импортируется), мы можем разместить эти операторы (тестовые случаи, операторы печати) под этим if
блок.
как по умолчанию (когда модуль работает как основной, не импортируются)__name__
переменная имеет значение "__main__"
, и когда он будет импортирован __name__
переменная получит другое значение, скорее всего, имя модуля ('M'
).
Это полезно в беге различные варианты модулей вместе и разделение их конкретных операторов ввода и вывода, а также если есть какие-либо тестовые случаи.
короче используйте этот 'if __name__ == "main"
' блок для предотвращения запуска (определенного) кода при импорте модуля.
давайте рассмотрим ответ более абстрактно:
предположим, что у нас есть этот код в x.py:
...
<Block A>
if __name__ == '__main__':
<Block B>
...
блоки A и B запускаются, когда мы запускаем "x.py".
но просто блок A (а не B) запускается, когда мы запускаем другой модуль "y.py", например, в котором x.y импортируется, и код запускается оттуда (например, когда функция в " x.py " называется от y.py).
при интерактивном запуске Python локальный __name__
переменной присваивается значение __main__
. Аналогично, когда вы выполняете модуль Python из командной строки, а не импортируете его в другой модуль, его __name__
атрибуту присваивается значение __main__
, а не фактическое имя модуля. Таким образом, модули могут смотреть на свои __name__
значением, чтобы определить для себя, как они используются, будь то в качестве поддержки для другой программы или в качестве основного приложения выполняется из командной строки. Таким образом, в модулях Python довольно распространена следующая идиома:
if __name__ == '__main__':
# Do something appropriate here, like calling a
# main() function defined elsewhere in this module.
main()
else:
# Do nothing. This module has been imported by another
# module that wants to make use of the functions,
# classes and other useful bits it has defined.
просто __name__
- переменная, определенная для каждого скрипта, которая определяет, выполняется ли скрипт как основной модуль или как импортированный модуль.
Итак, если у нас есть два сценария;
#script1.py
print "Script 1's name: {}".format(__name__)
и
#script2.py
import script1
print "Script 2's name: {}".format(__name__)
выход из выполнения script1 -
Script 1's name: __main__
и выход из выполнения script2:
Script1's name is script1
Script 2's name: __main__
Как видите, __name__
сообщает нам, какой код является "основным" модулем.
Это здорово, потому что вы можете просто написать код и не беспокоиться о структурных проблемах, таких как в C/C++, где, если файл не реализует функцию "main", он не может быть скомпилирован как исполняемый файл, и если это так, он не может быть использован в качестве библиотеки.
скажем, вы пишете скрипт Python, который делает что-то большое, и вы реализуете множество функций, которые полезны для других целей. Если я хочу их использовать, я могу просто импортировать ваш скрипт и использовать его без выполнения вашей программы (учитывая что ваш код выполняется только в if __name__ == "__main__":
контексте). В то время как в C/C++ вам придется разделить эти части на отдельный модуль, который затем включает файл. Представьте себе ситуацию ниже;
стрелки импорт ссылок. Для трех модулей, каждый из которых пытается включить предыдущий код модулей, есть шесть файлов (девять, считая файлы реализации) и пять ссылок. Это затрудняет включение другого кода в C проект, если он не скомпилирован специально как библиотека. Теперь представьте его для Python:
вы пишете модуль, и если кто-то хочет использовать ваш код, они просто импортировать его и __name__
переменная может помочь отделить исполняемую часть программы от библиотечной части.
считаем:
if __name__ == "__main__":
main()
он проверяет, если __name__
атрибут скрипта Python -"__main__"
. Другими словами, если выполняется сама программа, атрибут будет __main__
, поэтому программа будет выполнена (в этом случае
прежде чем объяснять что-либо о if __name__ == '__main__'
важно понимать, что __name__
и что он делает.
что это
__name__
?
__name__
это DunderAlias - можно рассматривать как глобальную переменную (доступную из модулей) и работает аналогично global
.
это строка (глобальная как упоминалось выше), как указал type(__name__)
(уступая <class 'str'>
), и является встроенным стандартом для обоих Python 3 и Python 2 версий.
где:
он может использоваться не только в скриптах, но также может быть найден как в интерпретаторе, так и в модулях/пакетах.
переводчик:
>>> print(__name__)
__main__
>>>
сценарий:
test_file.py:
print(__name__)
в результате __main__
модуль или пакет:
somefile.py:
def somefunction():
print(__name__)
test_file.py:
import somefile
somefile.somefunction()
в результате somefile
обратите внимание, что при использовании в пакет или модуль, __name__
принимает имя файла. Путь фактического модуля или пути пакета не задан, но имеет свои собственные DunderAlias __file__
, что позволяет это.
вы должны это видеть, где __name__
, где это основной файл (или программа) будет всегда возвращение __main__
, и если это модуль / пакет или что-то, что работает с другим скриптом Python, вернет имя файла, из которого он произошел.
практика:
быть переменной означает, что это значение можете перезаписывается ("может "не означает" должен"), перезаписывая значение __name__
приведет к отсутствию читаемости. Так что не делайте этого ни по какой причине. Если вам нужна переменная, определите новую переменную.
всегда предполагается, что значение __name__
на __main__
или имя файла. Еще раз изменение этого значения по умолчанию вызовет больше путаница в том, что это будет хорошо, вызывая проблемы дальше по линии.
пример:
>>> __name__ = 'Horrify' # Change default from __main__
>>> if __name__ == 'Horrify': print(__name__)
...
>>> else: print('Not Horrify')
...
Horrify
>>>
считается хорошей практикой в целом, чтобы включить if __name__ == '__main__'
в скриптах.
теперь ответ
if __name__ == '__main__'
:
теперь мы знаем, что поведение __name__
вещи становятся яснее:
An if
является оператором управления потоком, который содержит блок кода будет выполняться, если задано значение true. Мы видели это __name__
можно взять либо
__main__
или имя файла, из которого он был импортирован.
это означает, что если __name__
равна __main__
тогда файл должен быть основным файлом и должен фактически выполняться (или это интерпретатор), а не модуль или пакет, импортированный в скрипт.
если действительно __name__
принимает значение __main__
затем, что в этом блоке кода выполнять.
это говорит нам, что если запущенный файл является основным файлом (или вы работаете непосредственно с интерпретатором), то это условие должно выполняться. Если это пакет, то он не должен, и значение не будет __main__
.
модули:
__name__
также может использоваться в модулях для определения имени модуля
варианты:
это также можно делать другие, менее распространенные, но полезные вещи с __name__
некоторые я покажу здесь:
выполняется, только если файл является модулем или пакетом:
if __name__ != '__main__':
# Do some useful things
выполняется одно условие, если файл является основным, а другое, если это не так:
if __name__ == '__main__':
# Execute something
else:
# Do some useful things
вы также можете использовать его для предоставления выполняемых функций справки / утилит на пакетах и модулях без сложного использования библиотек.
она также позволяет модули будут запускаться из командной строки в качестве основных скриптов, что также может быть очень полезно.
существует ряд переменных, которые система (интерпретатор Python) предоставляет для исходных файлов (модулей). Вы можете получить их значения в любое время, так что давайте сосредоточимся на __имя__ переменной/атрибутов:
когда Python загружает файл исходного кода, он выполняет весь найденный в нем код. (Обратите внимание, что он не вызывает все методы и функции, определенные в файле, но определяет их.)
прежде чем интерпретатор выполняет исходный код файл, хотя, он определяет несколько специальных переменных для этого файла;__имя__ является одной из тех специальных переменных, которые Python автоматически определяет для каждого файла исходного кода.
Если Python загружает этот файл исходного кода в качестве основной программы (т. е. файл, который вы запускаете), то он устанавливает специальный __имя__ переменная для этого файла должна иметь значение " _ _ main__".
если это импортируется из другого модуля,__имя__ будет установите имя этого модуля.
Итак, в вашем примере частично:
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))
означает, что блок кода:
lock = thread.allocate_lock()
thread.start_new_thread(myfunction, ("Thread #: 1", 2, lock))
thread.start_new_thread(myfunction, ("Thread #: 2", 2, lock))
будет выполняться только при непосредственном запуске модуля; блок кода не будет выполняться, если другой модуль вызывает / импортирует его, потому что значение __имя__ не будет равна "main
Я думаю, что лучше всего разбить ответ на глубину и простыми словами:
__name__
: каждый модуль в Python имеет специальный атрибут __name__
.
Это встроенная переменная, которая возвращает имя модуля.
__main__
: Как и другие языки программирования, Python также имеет точку входа в выполнение, т. е. main. '__main__'
- это имя области, в которой выполняется код верхнего уровня. В основном у вас есть два способа использования модуля Python: запустите его прямо как сценарий, или импортировать его. Когда модуль запускается как скрипт, его __name__
установлено значение __main__
.
таким образом, стоимость __name__
атрибут имеет значение __main__
когда модуль запускается как основная программа. В противном случае значение __name__
может содержать имя модуля.
это специальный для того, когда файл Python вызывается из командной строки. Это обычно используется для вызова функции "main ()" или выполнения другого соответствующего кода запуска, например обработки аргументов командной строки.
это может быть написано несколькими способами. Другой:
def some_function_for_instance_main():
dosomething()
__name__ == '__main__' and some_function_for_instance_main()
Я не говорю, что вы должны использовать это в производственном коде, но это служит для иллюстрации того, что в if __name__ == '__main__'
. Это хорошая конвенция для вызова main функция в Python файлов.
if __name__ == "__main__":
- это в основном среда скриптов верхнего уровня, и она указывает интерпретатор, который ("у меня самый высокий приоритет, который должен быть выполнен первым").
'__main__'
- это имя области, в которой выполняется код верхнего уровня. Модуль __name__
устанавливается равным '__main__'
при чтении из стандартного ввода, скрипта или интерактивного приглашения.
if __name__ == "__main__":
# Execute only if run as a script
main()
причина
if __name__ == "__main__":
main()
в первую очередь, чтобы избежать импорт замка проблемы, которые возникнут из иметь код сразу импортированный. Вы хотите main()
для запуска, если ваш файл был вызван напрямую (это __name__ == "__main__"
case), но если ваш код был импортирован, импортер должен ввести ваш код из истинного основного модуля, чтобы избежать проблем с блокировкой импорта.
побочным эффектом является то, что вы автоматически подписываетесь на методологию, которая поддерживает несколько точек входа. Вы можете запустить программу с помощью main()
в качестве точки входа, но вы не должны. В то время как setup.py
ждет main()
другие инструменты использовать альтернативные точки входа. Например, чтобы запустить файл как
вы можете сделать файл пригодным для использования в качестве скрипт и модуль импортируемые.
fibo.py (модуль с именем fibo
)
# Other modules can IMPORT this MODULE to use the function fib
def fib(n): # write Fibonacci series up to n
a, b = 0, 1
while b < n:
print(b, end=' ')
a, b = b, a+b
print()
# This allows the file to be used as a SCRIPT
if __name__ == "__main__":
import sys
fib(int(sys.argv[1]))
считаем:
print __name__
вывод выше __main__
.
if __name == "__main__":
print "direct method"
вышеуказанное утверждение истинно и печатает "прямого метода". Предположим, если они импортировали этот класс в другой класс, он не печатает "прямого метода", потому что при импорте он будет ставить __name__ equal to "firstmodel name"
.
Я так много читал на протяжении ответов на этой странице. Я бы сказал, Если вы знаете что-то, наверняка вы поймете эти ответы, иначе вы все еще в замешательстве.
чтобы быть коротким, вам нужно знать несколько пунктов:
import a
действие фактически запускает все, что можно запустить в "a"из-за пункта 1 Вы можете не хотеть, чтобы все было запущено в "a" при импорте его
в решить проблему в пункте 2, python позволяет поставить условие check
__name__
является неявной переменной во всех .модули py; когда a.py импортируется, значение__name__
of a.модуль py имеет имя файла "a"; когда a.py запускается напрямую с помощью " python a.py", что означает a.py-точка входа, затем значение__name__
of a.модуль py имеет значение string__main__
на основе механизма, как python устанавливает переменную
__name__
для каждого модуля, вы знаете, как достичь точки 3? Ответ довольно прост, верно? Если поставить условие:if __name__ == "__main__": ...
; вы даже можете поставить, если__name__ == "a"
в зависимости от функциональной необходимости
важно, что python является особенным в точке 4! Остальное-простая логика.
создать файл, a.py:
print(__name__) # It will print out __main__
__name__
всегда равна __main__
всякий раз, когда этот файл выполнить непосредственно показывая, что это основной файл.
создать другой файл, б.ру в одном каталоге:
import a # Prints a
запустить его. Он будет печатать a, т. е. имя файла, который импортированный.
так, чтобы показать два разных поведения одного и того же файла, это часто используемый прием:
# Code to be run when imported into another python file
if __name__ == '__main__':
# Code to be run only when run directly
все ответы в значительной степени объяснили функциональность. Но я приведу один пример его использования, который может помочь прояснить концепцию дальше.
предположим, что есть две Python файлов.пы и Б.пы. Теперь.пы импорта б.пы. Мы запускаем собой.файл py, где "импорт б.пы" код выполняется в первую очередь. Перед остальными буквами "а".выполняется код py, код в файле b.пай должен бежать полностью.
в b.py-код есть некоторый код, который является эксклюзивным для этого файл b.py и мы не хотим никакого другого файла (кроме b.py file), который импортировал b.файл py, чтобы запустить его.
Так вот что проверяет эта строка кода. Если это основной файл (т. е. b.py) запуск кода, который в данном случае не является (a.py является основным запущенным файлом), тогда выполняется только код.
Если это .py файлы импортируются другими .py-файлы, код в разделе "оператор if" не будет выполнен.
Если это .py управляются python this_py.py
под оболочкой, или дважды щелкнул в Windows. код в разделе "оператор if" будет выполнен.
обычно пишется для тестирования.
если имя =='main':
посмотрим, если __name__ == '__main__':
довольно часто.
он проверяет, импортируется ли модуль или нет.
другими словами, код внутри if
блок будет выполняться только при непосредственном запуске кода. Вот!--4--> означает not imported
.
давайте посмотрим, что он делает, используя простой код, который выводит название модуля:
# test.py
def test():
print('test module name=%s' %(__name__))
if __name__ == '__main__':
print('call test()')
test()
если мы бежим код сразу через python test.py
имя модуля __main__
:
call test()
test module name=__main__
этот ответ предназначен для Java-программистов, изучающих Python. Каждый файл Java обычно содержит один открытый класс. Вы можете использовать этот класс двумя способами:
(1) вызовите класс из других файлов. Вам просто нужно импортировать его в вызывающую программу.
(2) Запустите класс отдельно для целей тестирования.
в последнем случае класс должен содержать открытый статический метод void main (). В Python эта цель обслуживается глобально определенной меткой '__main__'
.
недавно я наткнулся на это при создании класса в python (глубокое обучение) и в моем понимании и в согласии с приведенными выше объяснениями, я разработаю
имя=="main"
как иногда мы строим класс В a .py-файл и определяет множество функций внутри этого класса. но мы не хотим обрабатывать все эти функции класса для одной цели. например, для создания класса и определите некоторые функции для создания данных (.npy файлов), а некоторые для загрузки данных. поэтому, если мы определим
имя=="main"
xxx=class_name ()
ХХХ.create_data()
означает, если мы называем .py файл, то он будет только создавать данные и не будет обрабатывать другие функции класса. другие функции класса (загрузка данных) также могут быть импортированы другими классами.
_ имя _ == _ main _ убедитесь, что код / операторы, присутствующие внутри этого блока, будут выполняться только при непосредственном выполнении этого файла, вместо этого, если мы импортируем его как модуль в другой файл python, мы можем вызвать функцию, определенную в нем, а также блок, который присутствует внутри _ имя == main _ не будет выполняться.
что делает if имя ==" main": что делать?
схема:
1, как исполняемый скрипт, работает для себя как самозанятый:
Он выполняет коды в модуле, если запускается непосредственно как "python foo.py"
2, Как импортированный модуль для работы для других:
Его коды можно безопасно использовать повторно, если они импортированы в другой модуль как "import foo"