我经常在大佬的程序中看到这样的东西(if name == ‘ main ’)
以前在学校的时候也只知道是个程序的入口,然后就只看下面的部分而已。只知道程序是从(if name == ‘ main ’)下面开始走的。
今天在看python 3.7的官方文档时,刚好看到这东西了,就顺便写一下自己的理解
在大佬们的程序中,我们一眼看去,程序是分为这么几个块的

  1. import ****** <-------1、导入的某个模块
  2. def xxxx(): <-------2、定义的某个函数
  3. ******
  4. ******
  5. ******
  6. if __name__ == '__main__': <-------3、入口
  7. ****** <-------4、入口执行的代码
  8. ******

(至少我以前在学校里的时候看一个程序,都是这么看的。。。。。)
在这4个块中,以前在学校,我只看第4部分,也就是程序执行的代码。
工作之后,我看一眼第4部分,然后主要专研第2部分,这个定义的函数主要都做了什么。
第1部分很好理解,就是导入了某个程序需要用模块。
而这第3部分呢,事实上,它为程序定义了一个入口,按上面的代码举个栗子

一:当我们直接运行这个程序的时候

当我们直接运行这个程序的时候,程序是这么走的。

  1. 先从入口(3),开始往下走。
  2. 走到代码执行部分(4)
  3. 当执行的代码需要用到自己定义的函数的时候,代码就直接跳到定义的函数部分(2)

上面应该能理解吧?这就是python逐步执行程序的步骤。(不谈导入模块部分,类似于上述第3步)


但是呢,有时候我们写了另外一个程序B(假设上面一开始的是程序A),而程序B的某一部分代码需要用到程序A中已经定义好的函数,那么这时候怎么搞?
把程序A中的函数定义的代码复制粘贴过去?
也不是不可以,但是如果你要开发一个系统呢,上万行的代码,都粘贴到一个文件中?
这时候,我们可以使用导入模块的方式来导入需要的函数!

二:当我们把这个程序当做模块导入另一个程序的时候

这时候我们就需要if name == ‘main‘:来帮助我们了。
当这个程序A被当做模块导入另一个程序的时候,我们只需要其中1、2部分,而不需要第4部分。
所以在程序中,import程序A后,当程序B的代码需要用到程序A中定义好的函数的时候,它会自己去取函数部分,而不会使整个程序A执行。
大致步骤如下:
1、从程序B入口开始往下,走到代码执行部分
2、当执行的代码需要用到程序A中的函数时,去取出程序A函数代码(不取出第3、4部分代码),再执行
像if name == ‘ _main _’:这样的方式写程序,当以后我们另一个程序需要用到这个程序的时候,就直接导入这个程序就好了,省去了重写函数和复制粘贴的时候。
我觉得我越说越乱,上结论:

当xx.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;
当xx.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。