python __name__ == ‘__main__’详细解释(27)
学习过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 文件,作为模块文件:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.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):
# 导入 my_name 模块
import my_name # 定义一个函数并打印 __name__
def prit_name():
my_name.prit_name()
print("python_main.py __name__:", __name__) if __name__ == "__main__":
prit_name()
输出结果:
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),输出:
my_name.py __name__: __main__
如果py文件作为模块被导入(import),那么__name__就是该py文件的文件名(也称 模块名);
如果py文件直接运行时(Ctrl+Shift+F10),那么__name__默认等于字符串”__main__”;
二.作用
1.__name__ == “__main__” 作为启动py文件的main函数入口
2.一个项目中必然会包含多个模块文件,每个模块文件在自己写完代码之后会做一些简单的测试用于检测bug 或者 对自己的函数调用写一个简单的示例,而恰到好处的是:__name__ == “__main__” 既不会影响你的测试代码,也不会影响别人调用你的接口函数。

猜你喜欢:
转载请注明:猿说Python » python __name__ == “__main__” 详细解释

python __name__ == ‘__main__’详细解释(27)的更多相关文章
- 关于python中__name__=='__main__'的解释
调用文章是:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318451 ...
- python--关于if __name__==__main__的解释
在解释之前首先我们看下__name__这个变量存的是什么: #!/usr/bin/env python # -*- coding:utf-8 -*- print(__name__) 结果: __mai ...
- Python - __name__=='__main__'是干啥的,以及python -m与python的区别
1. __name__=='__main__'是干啥的 先看例子,准备a.py和b.py放在同一个文件夹中 vi a.py # coding: utf-8 print("i am just ...
- python __name__ = '__main__' 的作用
很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...
- Python __name__="__main__"的作用
该语句加在模块的最后,可以让这个模块,即可以被别人import,又可以直接运行. fibo.py文件: def fibo(): pass # fibo函数的内容 if __name__==" ...
- Python - __name__ == '__main__'
if __name__ == '__main__': app.run() __name__系统变量指示模块应如何被加载,他的值为"__main__"时表示当前模块是被直接执行. _ ...
- python内置类型详细解释
文章编写借鉴于内置类型 - Python 3.7.3 文档,主要用于自己学习和记录 python主要内置类型包括数字.序列.映射.类.实例和异常 有些多项集类是可变的.它们用于添加.移除或重排其成员的 ...
- if __name__ == "__main__"的疑惑
Python中if __name__ == "__main__"详细解释: 想必很多初次接触python都会见到这样一个语句,if __name__ == "__main ...
- python基础8之自定义模块、if __name__==__main__:解释
一.自定义模块与使用 python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
随机推荐
- 066_调整虚拟机内存参数的 shell 脚本
#!/bin/bash#脚本通过调用 virsh 命令实现对虚拟机的管理,如果没有该命令,需要安装 libvirt-client 软件包 cat << EOF1.调整虚拟机最大内存数值2. ...
- Web前端-JavaScript基础教程下
Web前端-JavaScript基础教程下 <script>有6个属性: async对外部脚本有效,可以用来异步操作,下载东西,不妨碍其他操作. charset为src属性指定字符集. d ...
- 接口测试必学之curl命令
curl命令使用 curl命令 curl命令是服务器端调试接口最常用的命令,没有之一 curl测试GET接口 curl http://www.baidu.com url参数可以直接写到url中,此时u ...
- Linux网络编程四、UDP,广播和组播
一.UDP UDP:是一个支持无连接的传输协议,全称是用户数据包协议(User Datagram Protocol).UDP协议无需像TCP一样要建立连接后才能发送封装的IP数据报,也是因此UDP相较 ...
- 重启hdfs集群的时候,报大量的gc问题。
问题现象: 2019-03-11 12:30:52,174 INFO org.apache.hadoop.util.JvmPauseMonitor: Detected pause in JVM or ...
- 如何查看Linux cpu核数、版本等信息
CPU总核数 = 物理CPU个数 * 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 * 超线程数 1.查看CPU信息(型号): [root@iZ2ze1rl2qy ...
- 将页面中所有的checkbox设成单选得
$(function () { var allBox = $(":checkbox"); allBox.click(function () { allBox.removeAttr( ...
- SpringBoot + Vue前后端分离图片上传到本地并前端访问图片
同理应该可用于其他文件 图片上传 application.yml 配置相关常量 prop: upload-folder: E:/test/ # 配置SpringMVC文件上传限制,默认1M.注意MB要 ...
- DOM 事件有哪些阶段?谈谈对事件代理的理解
分为三大阶段:捕获阶段--目标阶段--冒泡阶段 事件代理简单说就是:事件不直接绑定到某元素上,而是绑定到该元素的父元素上,进行触发事件操作时(例如'click'),再通过条件判断,执行事件触发后的语句 ...
- presto计算日期间隔天数或者小时间隔——date_diff函数使用
“Presto是Facebook最新研发的数据查询引擎,可对250PB以上的数据进行快速地交互式分析.据称该引擎的性能是 Hive 的 10 倍以上.”,亲身用过之后,觉得比hive快了10倍不止. ...
