if __name__ == '__main__' python
关于这个我已经读了很多文章了
1 | if __name__ == '__main__' |
但没拿到……我要和你分享代码,请你简单解释一下。
我创建了一个文件"ab.py"
1 2 3 4 | def a(): print('A function in ab file'); a() |
第二个文件是"xy.py"
1 2 3 4 5 6 7 8 9 10 | import ab def b(): print('b function') def x(): print ('s'); x() if __name__ =="__main__" :b() |
当我执行这个代码时,这个输出就来了
1 2 3 | A function in ab file s b function |
现在我想知道这意味着什么,这段代码实际上是做什么的,为什么我们要实现它?我们的代码在没有它的情况下也可以工作
1 | if __name__ =="__main__" :b() |
当显式运行文件时,将运行在
1 | python myfile.py |
但是,如果您在其他地方进口
1 | import myfile |
不会调用
你应该养成经常使用这个的习惯。
理解此语句的一个非常简单的示例如下:
假设我们有下面的python脚本名为:"using ou name.py":
1 2 3 4 5 6 | # Filename: using_name.py if __name__ == '__main__': print 'This program is being run by itself' else: print 'I am being imported from another module' |
现在,试着做以下两件事,看看会发生什么:
1)直接运行脚本
1 | $ python using_name.py |
结果
1 | This program is being run by itself |
2)导入脚本
1 2 | $ python import using_name |
结果
1 | I am being imported from another module |
What is actually doing this code?
Ok.
执行xy.py时,导入ab。import语句在导入时运行模块,因此ab的操作在xy的其余部分之前执行。完成ab后,继续xy。好的。
解释器跟踪哪些脚本与
要了解发生了什么,首先要关注未插入的行以及它们在脚本中的显示顺序。记住,在调用函数或
- 打开XYY PY。
- 使用
__name__ ab.py导入并打开文件。 - 哦,一个函数。我会记住的。
- 好的,函数a();我刚刚学会了。我想我现在就打印。
- 文件结束;回到
'__main__' ! - 哦,一个函数。我会记住的。
- 另一个。
- 函数x();好,打印"s"。
- 这是什么?一份
if 声明。好吧,条件已经满足了(变量__name__ 被设置为'__main__' ,所以我将打印‘b函数’。
不过,我认为你使用不当。可能有例外,但最下面的两行应该是:好的。
1 2 | if __name__ =="__main__": main() |
…这意味着"如果这是‘主’脚本或主脚本,则执行名为
Why we implement this?
Ok.
(哇,我在写这篇文章的时候,真的想到了这一点。这也是我很难理解的部分,因为我从来没有自己用从其他脚本调用的函数编写脚本。)好的。
还记得我之前说过的进口声明吗?当您导入一个模块时,它不仅"识别"它,而且等待进一步的指示。它实际上运行脚本中包含的所有可执行操作。因此,将脚本的肉放入
同样,也会有例外,但通常情况下,
Our code is work without it also
Ok.
是的,你是对的。这些单独的函数可以从不包含在
我应该说,作为旁白,这个线程包含了@kindall的答案,它最终帮助我理解了——为什么,而不是如何。不幸的是,它被标记为这个的副本,我认为这是一个错误。(我是这个板的新手,所以还不能标记它;如果你同意我,请标记它以引起国防部的进一步关注。)好的。好啊。
简单来说,只有当模块直接由python解释器(例如python module.py)执行或在导入后显式调用函数时,
例子:测试文件
1 2 3 4 5 6 | #this will always be executed even if this module is simply imported by other file or this module is the entry point print"I will always run in any situation. Even when this module is 'just' imported" if __name__ =="__main__": #this will be executed only when this module is the entry point eg. python testFile.py but not if this file is imported print"I will only run if this module (testFile.py) is executed directly by python interpreter" |
App.Py
1 | import testFile |
python测试文件.py
输出:在任何情况下我都会跑步。即使这个模块是"刚刚"导入的
只有当这个模块(testfile.py)由python解释器直接执行时,我才会运行。
Python
输出:在任何情况下我都会跑步。即使这个模块是"刚刚"导入的
如果您想了解