引子

要搞清楚这个问题,可以先听一个故事~~~

像我们做事一样,都需要一个起始点,终点存在与否无关紧要。编程也是一样,任何程序都有一个入口,在所谓的静态编译语言中,如Java的入口是一个名字叫做Main的类,所有的程序都必须从这里开始运行,因此读别人的Java代码很方便,直接找入口就可以了。而Python这种动态解释型的语言不一样,他的入口就是程序的第一行,从代码开始书写的地方一直读到程序末尾,这就很有意思了,为了让程序员读别人的代码更方便,也为了让程序输出更为简洁,约定俗成了一种规范,即模仿Java,使用if __name__ == '__main__'给程序设定一个入口。

if __name__ == '__main__'是为了使Python更优雅而约定俗成的一个程序入口

但是,这个程序入口和Java略有不同:

  • Java强制程序所有的输入输出、流程控制等都在Main类里面;
  • Python只是使用if __name__ == '__main__'保证不是同一个模块的输入输出、流程控制等不相互影响。

分步骤详细举例说明

什么是__name__

新建一个Python程序,a.py

# a.py

print('a.py':__name__)

输出:

a.py:__main__

再新建一个Python程序,b.py

# b.py
import a # 当前程序包的名字
print('b.py':__name__)
# b.py程序的名字
print('a.py':a.__name__)

运行b.py,输出:

b.py:__main__
a.py:a

小结

__name__是程序的名称,当前运行程序的__name____main__,非当前运行程序的名称为程序的模块名称,即自定义值。

如果程序里面含有程序入口,那么程序如何执行呢?

Python只是使用if __name__ == '__main__'保证不是同一个模块的输入输出、流程控制等不相互影响。如何解释呢?

# a.py

print('01:首先执行这一行代码')

if __name__ == '__main__':
print('02:然后执行这一行代码')

运行a.py,输出:

01:首先执行这一行代码
02:然后执行这一行代码

以上说明,python是顺序执行的,这个所谓的程序入口不能改变执行顺序

如果程序长这样呢?

# a.py

print('a-01:这是a程序的输出')

--------------------------

# b.py
import a if __name__ == '__main__':
print('b-01:这是b程序的输出')

运行b.py,输出:

a-01:这是a程序的输出
b-01:这是b程序的输出

可见,又一次证明程序是顺序执行的,而且程序入口并没有起作用。

那么,这个程序入口的作用是什么呢?

# a.py

if __name__ == '__main__':
print('a-01:这是a程序的输出') -------------------------- # b.py
import a if __name__ == '__main__':
print('b-01:这是b程序的输出')

运行b.py,输出:

b-01:这是b程序的输出

这次成功阻止了a.py程序的输出,可以轻松理解:Python只是使用if __name__ == '__main__'保证不是同一个模块的输入输出、流程控制等不相互影响。

小结

为了更简洁优雅的使用Pyhton十分建议将每个模块的执行逻辑和输入输出都放在程序入口里面,这样在调用时不会污染程序上下文执行环境

if __name__ == '__main__'到底是什么?的更多相关文章

  1. if __name__ == '__main__' 到底是何方神圣(转)

    想必很多初次接触python都会见到这样一个语句,if __name__ == "__main__": 那么这个语句到底是做什么用的呢?在解释之前,首先要声明的是,不管你是多么小白 ...

  2. if __name__== "__main__" 的意思(作用)python代码复用

    if __name__== "__main__" 的意思(作用)python代码复用 转自:大步's Blog  http://www.dabu.info/if-__-name__ ...

  3. 浅析python 中__name__ = '__main__' 的作用

    引用http://www.jb51.net/article/51892.htm 很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码 ...

  4. 【转】浅析python 中__name__ = '__main__' 的作用

    原文链接:http://www.jb51.net/article/51892.htm 举例说明解释的非常清楚,应该是看到的类似博文里面最简单的一篇: 这篇文章主要介绍了python 中__name__ ...

  5. python中if __name__ == '__main__'

    python 中__name__ = '__main__' 的作用,到底干嘛的? 有句话经典的概括了这段代码的意义: “Make a script both importable and execut ...

  6. 从python run 和python unittest两种eclipse运行方式深入理解if __name__ == "__main__"

    在写一个简单的python测试程序的时候,发现eclipse中Run as "Python run 和 Python unittest”结果不一样?为什么会不一样? 先贴一下代码段: # - ...

  7. 【转载】__name__ == "__main__": 你认识我么?

    <笨方法学Python>的习题50中,脚本ex50.py最后一行代码就是 if __name__ == "__main__": 那么,这句代码到底有什么用呢? 莫急莫急 ...

  8. 【Python中if __name__ == '__main__': 的解析】

    在很多Python代码中,在代码的最下方会看到  if __name__ == '__main__':,这段代码到底有什么用呢? 在理解这个语句的作用前,需要知道的是,一般的Python文件后缀为.p ...

  9. 如何简单地理解Python中的if __name__ == '__main__'

    https://blog.csdn.net/yjk13703623757/article/details/77918633 1. 摘要 通俗的理解__name__ == '__main__':假如你叫 ...

随机推荐

  1. Altium 分形天线设计

    Altium 分形天线设计 程序运行界面 Cantor三分集 Koch雪花 Sierpinski垫片 源代码: Iter_Num = 4     'diedai PI = 3.1415926 Call ...

  2. 在scratch中怎样编写抓蝴蝶游戏

    打开scratch2.0软件,进入工作界面,将语言切换为简体中文:将默认的演员猫删除掉:在新建背景中选择“从背景库中选择背景”: 选择户外,来点一个背景图flower bed,然源后点下面的确定: 背 ...

  3. python爬虫两个影院的实例

    主要两个的python代码如下: import requests from bs4 import BeautifulSoup url = 'https://www.17k.com/' headers ...

  4. 数据结构和算法(Golang实现)(22)排序算法-希尔排序

    希尔排序 1959 年一个叫Donald L. Shell (March 1, 1924 – November 2, 2015)的美国人在Communications of the ACM 国际计算机 ...

  5. 子域名爆破工具:OneForALL

    0x00 简介 OneForAll是一款功能强大的子域收集工具 0x01 下载地址 码云: https://gitee.com/shmilylty/OneForAll.git Github: http ...

  6. AJ学IOS 之微博项目实战(2)微博主框架-自定义导航控制器NavigationController

    AJ分享,必须精品 一:添加导航控制器 上一篇博客完成了对底部的TabBar的设置,这一章我们完成自定义导航控制器(NYNavigationController). 为啥要做自定义呢,因为为了更好地封 ...

  7. Nikto使用方法

    Introduction Nikto是一款开源的(GPL)网站服务器扫描器,使用Perl基于LibWhisker开发.它可以对网站服务器进行全面的多种扫描,包括6400多个潜在危险的文件/CGI,检查 ...

  8. 【LeetCode】23.合并K个排序链表

    题目描述 23.合并K个排序链表 合并k个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] ...

  9. A - Number Sequence 哈希算法(例题)

    Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= M ...

  10. awd平台搭建

    1.先是使用 https://github.com/m0xiaoxi/AWD_CTF_Platform 这个平台搭建 这个平台很好用,是python脚本自动搭建,基本不需要怎么更改,自带了四道题的源码 ...