刚学习python的时候,经常会参考一些大佬的代码,然后会发现,好多的代码里面都会有这样一段话:
if __name__== '__main__':
注:下文main指代上一行代码
刚开始也没有在意这一行代码,只知道在pycharm这个IED里面,敲上main回车,就会出现这一行代码。对其的理解也仅限于把它当成文件里面的一个主函数来用。随着后来代码越写越多,然后对这行代码进行了深入的了解,这里把自己所理解的分享给大家。
首先先说一下,一个.py文件主要就两种用法:一、此文件就属于脚本文件,直接执行就可以了。二、被当成模块,由其他脚本文件调用使用。本文要说的main就与.py文件的两种使用方式有关。
简单来说,当某一.py文件作为脚本文件时候,才会执行main下面的内容,反之,如果说.py文件是被调用的模块,那么main下面的内容将不会被执行。
这么说不理解的话,上例子。
先建两个.py文件。
test1.py里面内容为:
print("我是test1.py里面的代码!!!")
def model():
print("我是model函数里面的代码!!!")
if __name__ == '__main__':
print("我是main里面的代码!!!")
model()
test2.py里面内容为:
from test1 import model as md
md()
先执行test1.py,输出结果为

执行test2.py,输出结果为

很明显在执行test1.py时,代码在脚本全局从上到下执行,首先输出:
我是test1.py里面的代码!!!
然后执行main输出:
我是main里面的代码!!!
然后执行model函数,输出:
我是model函数里面的代码!!!
在执行test2.py时,首先执行from test1 import model as md,此处调用了test1.py文件,所以首先对test1.py进行一次编译,输出:
我是test1.py里面的代码!!!
然后执行test1.py里面的model函数,输出:
我是model函数里面的代码!!!
可以看出,test1.py里面main下的代码并没有被执行。
那么为什么会这么运行呢?
仔细研究一下代码,if不用说了就是判断,那么这段话重点就在于__name__,和 ’ _ main _ '是什么。
每个python模块(.py文件)都包含内置的变量__name__,当运行模块被执行的时候,__name__等于文件名(包含了后缀.py);如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)。而 ’ _ main _ '等于当前执行文件的名称(包含了后缀.py)。进而当模块被直接执行时, _ name _ == ’ _ main _ '结果为真。
所以只有文件属于脚本文件的时候,才会执行if _ name _ == ’ _ main _ ':下的代码。
319




被折叠的 条评论
为什么被折叠?



