前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >27.python __name__ == ‘__main__’详细解释

27.python __name__ == ‘__main__’详细解释

作者头像
猿说编程[Python和C]
修改2021-04-19 14:32:35
4010
修改2021-04-19 14:32:35
举报
文章被收录于专栏:猿说编程猿说编程

学习过C语言或者Java语言的盆友应该都知道程序运行必然有主程序入口main函数,而python却不同,即便没有主程序入口,程序一样可以自上而下对代码块依次运行,然后python不少开源项目或者模块中依然存在 __name__ == “__main__” 这种写法,具体是上面意思呢?

还有这种操作
还有这种操作

一.语义解释

1.__name__

__name__ 是python的内置属性,是系统全局变量!每一个py文件都有一个属于自己的__name__:

如果py文件作为模块被导入(import),那么__name__就是该py文件的文件名(也称 模块名);

如果py文件直接运行时(Ctrl+Shift+F10),那么__name__默认等于字符串”__main__”;

举个简单的例子:假如你名字是张三,在朋友眼中,你是张三(__name__ == '张三');在你自己眼中,你是你自己(__name__ == '__main__')

就是有这种操作
就是有这种操作
2.”__main__”

“_ _main_ _” 实际上就是一个字符串,用来鉴别程序入口,没有太多花里胡哨的东西.

3.__name__ == “__main__”

当.py文件被直接运行 (Ctrl+Shift+F10)时, if  __name__ == “__main__”  之下的代码块将被运行,该语句就相当与python的main主函数入口,示例代码如下:

a.新建一个 my_name.py 文件,作为模块文件:

代码语言:javascript
复制
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): https://www.codersrc.com/
 
@File:my_name.py
@Time:2019/10/14 22:02
 
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
 
# 定义一个函数并打印 __name__
def prit_name():
    print("my_name.py __name__:", __name__)
 
if __name__ == "__main__":
    prit_name()

b.新建一个 python_main.py 文件,作为启动文件 (Ctrl+Shift+F10)

代码语言:javascript
复制
# 导入 my_name 模块
import my_name
 
# 定义一个函数并打印 __name__
def prit_name():
    my_name.prit_name()
    print("python_main.py __name__:", __name__)
 
if __name__ == "__main__":
    prit_name()

输出结果:

代码语言:javascript
复制
my_name.py __name__: my_name
python_main.py __name__: __main__

由此可见,作为启动文件 python_main.py ,该文件的内置属性 __name__ 等于 “__main__”,而my_name.py 作为导入模块,该模块的 __name__ 等于文件名(也称模块名字),所以my_name.py 中的 表达式 if __name__ == “__main__” 并不成立!

当直接将my_name.py作为启动文件时 (Ctrl+Shift+F10),输出:

代码语言:javascript
复制
my_name.py __name__: __main__

如果py文件作为模块被导入(import),那么__name__就是该py文件的文件名(也称 模块名);

如果py文件直接运行时(Ctrl+Shift+F10),那么__name__默认等于字符串”__main__”;

废话多
废话多

二.作用

1.__name__ == “__main__” 作为启动py文件的main函数入口

2.一个项目中必然会包含多个模块文件,每个模块文件在自己写完代码之后会做一些简单的测试用于检测bug 或者 对自己的函数调用写一个简单的示例,而恰到好处的是:__name__ == “__main__”  既不会影响你的测试代码,也不会影响别人调用你的接口函数。

猜你喜欢:

1.python模块

2.python异常处理

3.python return逻辑运算表达式

4.python 字典推导式

5.python 列表推导式

转载请注明猿说Python » python __name__ == “__main__” 详细解释

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.语义解释
    • 1.__name__
      • 2.”__main__”
        • 3.__name__ == “__main__”
        • 二.作用
        • 猜你喜欢:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档