if __name__ == '__main__' 的理解

不同语言不同程序入口

对于不同的语言而言,每个程序都需要有一个入口,例如java,在类中需要一个main函数来作为程序的入口。

而Python属于脚本语言,不同于编译型语言那样,需要先将程序编译为二进制在运行,Python本身是动态的逐行解释运行,也就是从脚本程序的第一行开始运行,没有统一的入口。

一个Python源码文件除了可以被直接运行外,还可以作为模块(库)被导入到别的脚本程序中,因此在这里作为被导入的库中,有一些代码是我们不希望被执行的。

例子

举个例子来说:
有一个物体质量m=10,g=9.8(重力参数),求它的重力。
公式:G=m*g
所以创建一个param.py的文件,其中代码如下:

#coding=utf-8
#重力参数
g = 9.8
def main():
    print ("g:",g)

main()

运行结果下图:
控制台打印出 , g : 9.8

这里写图片描述
在创建一个sum.py的文件求G,代码如下:

#coding=utf-8
#在这里我们将上面文件定义的param中的g作为重力参数引入到其中
from param import g
#计算重力的函数
def calc_G(m):
        G = m*g
        return G
def main():
    print ("G:",calc_G(10))

main()
打印出:
g:  9.8
G: 98.0

这里写图片描述

结果可以看到,在param.py文件中的main函数也被执行了,而实际上我们并不希望它被执行,此时标题中的

if __name__ == '__main__' 

便派上了用场。我们将param.py中稍作修改:

#coding=utf-8
#重力参数
g = 9.8
def main():
    print ("g:",g)
if __name__ == '__main__':
    main()

再次运行sum.py:
看结果此时输出的是:

G: 98.0

这里写图片描述

if __name__ == ‘__main__’

if __name__ == '__main__' 相当于Python 模拟的程序入口。Python 本身并没有规定这么写,这只是一种编码习惯。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于 __name__ 的值。

__name__ 是内置变量,用于表示当前模块的名字。

结论

所以,if __name__ == '__main__' 我们简单的理解就是: 如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。

参考文章

http://blog.konghy.cn/2017/04/24/python-entry-program/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值