引言

我们先看下各个编程语言的代码框架输出Hello,World

C

#include <stdio.h>
int main()
{printf("Hello, World! \n");return 0;
}

C++

#include<iostream>
using namespace std;
int main()
{cout<<"HELLO WORLD"<<endl;return 0;
}

JAVA

public class HelloWorld{public static void main(String[] arr){System.out.print("Hello World");}}

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace HelloWorld
{class Program{static void Main(string[] args){Console.Write(" World!");}}
}

Python

print('Hello,World')

我们可以看到Python仅仅用了一行代码即可完成其他编程语言多行的输出Hello,World 其他的编程语言像C/C++/C#/JAVA 等 都会有一个main主函数的框架 所有的代码都是在该框架下运行的,有且只能有一个main主函数
代码从 main() 函数开始执行

但是:

Python不需要Main函数也能执行

Python不同于其他编程语言,Python是解释性语言,不需要先编译成二进制语言,再执行。Python是动态,是从上至下逐行解释运行。只要有正确的代码,python便可以执行该文件

程序入口:

很多的的编程语言像C/C++/C#/JAVA 等 都会有一个main主函数 作为程序入口,程序从main()主函数的第一句代码开始执行,直到main函数的最后一句代码程序运行结束

而Python 因为它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口,直到脚本的最后一行。

在了解了这些以后,我们再来看下下方的案例

案例:

编写一个测试模块test.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-' a test module 'def addFunc(a,b):  return a+b  print('test :1+1的计算结果:',addFunc(1,1))

再写一个新的mode.py文件来调用上方模块

import testprint('调用test模块执行的结果是:',test.addFunc(12,23))

运行test.py文件 正常运行

运行mode.py文件
可以看到 test.py 中的测试代码也被执行了一遍

显然,当运行mode.py后第一句结果并不是调用者所需要的,为了解决这一问题,Python提供了一个系统变量: __ name __
这时我们修改一下test.py的代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-' a test module 'def addFunc(a,b):  return a+bif __name__=='__main__':print('test :1+1的计算结果:',addFunc(1,1))

再次运行test.py 程序正常运行

这时再运行mode.py 发现程序运行结果正确

详解:

一个python的文件有两种使用的方法:

  • 1,直接作为脚本执行。
  • 2,import到其他的python脚本(.py文件)中导入被作为模块调用执行

if name == ‘main’: 的作用就是控制这两种情况执行代码的过程,在if name == ‘main’: 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而import到其他脚本中作为模块使用是不会被执行的。

简单来说:

if __ name __ == ’ __ main __'的意思是:当.py文件被直接运行时,if __ name __== ’ __ main __'之下的代码块将被运行;
当.py文件以模块形式被导入时,if __ _name __== ’ __ main __'之下的代码块不被运行。

__ name __

那么if __ name __ == ’ __ main __’ 这句代码具体是怎么实现的呢

__name__ 是系统内置变量,用于表示当前模块的名字,即所在文件名

1 当Pyhon模块直接运行时,__name__的值为“main”;


2 当模块被导入到其他文件作为import模块使用时, 该模块的__ name __为模块本身的名字 比如上方的test.py 作为模块被 mode.py引用时 test.py的 __ name __值就是 test

也就是说:
__name__有2个取值:

  • 当模块是被调用执行的,取值为模块的名字;
  • 当模块是直接执行的,则该变量取值为:__ main __

if name == ‘main’: 这句话的核心无非就是在判断该程序文件是否作为主程序入口。如果直接运行该程序文件,该文件作为主程序入口,name == ‘main’ 主程序 。
如果在运行主程序的时候调用其他程序文件,其他程序入口name != ‘main’ 自然就不等于main主程序 。

对于Python的模块讲解 可以参考这篇文章
【Python】模块详解/如何安装模块的方法

【Python】main函数 if __name__=='__main__' 详解相关推荐

  1. [ 7天学习Python编程,第一天]-----1.4 Python main函数:了解__main__【python舵手】

    PYTHON MAIN FUNCTION是任何程序的起点.当程序运行时,python解释器将顺序运行代码.仅当主函数作为Python程序运行时才执行.如果将其作为模块导入,它将不会运行main函数. ...

  2. Python·.·.print()函数格式化输出-超详解

    Python·.·.print()函数格式化输出 print()函数格式为: print(objects, sep=' ', end='\n', file=sys.stdout) 文章目录 Pytho ...

  3. Python return函数返回值(详解)

    文章目录 Python return函数返回值 Python return函数返回值 到目前为止,我们创建的函数都只是对传入的数据进行了处理,处理完了就结束.但实际上,在某些场景中,我们还需函数将处理 ...

  4. python annotate函数_Matplotlib库基础分析——详解标注点函数annotate()

    绘图是数据可视化最直接的方法,也是直观分析数据所必不可少的步骤.Matplotlib是Python中专门用于数据可视化的第三方库,也是最为流行的绘图库.Matplotlib库中的annotate()函 ...

  5. python pivot函数筛选_Python pivot_table详解

    再来介绍pandas库里的pivot_table()函数.pivot_table()与pivot()比较类似.其官方定义如下所示: DataFrame.pivot_table(values=None, ...

  6. python用函数绘制椭圆_详解opencv中画圆circle函数和椭圆ellipse函数

    1. void ellipse(InputOutputArray img, Point center, Size axes, double angle, double startAngle, doub ...

  7. 在python中使用关键字define定义函数_python自定义函数def的应用详解

    这里是三岁,来和大家唠唠自定义函数,这一个神奇的东西,带大家白话玩转自定义函数 自定义函数,编程里面的精髓! def 自定义函数的必要函数:def 使用方法:def 函数名(参数1,参数2,参数-): ...

  8. python def函数报错详解_python自定义函数def的应用详解

    这篇文章主要介绍了python自定义函数def的应用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 这里是三岁,来和大家唠唠 ...

  9. python实现排序函数_Python排序函数的使用方法详解

    Python排序函数完美体现了Python语言的简洁性,对于List对象,我们可以直接调用sort()函数(这里称为"方法"更合适)来进行排序,而对于其他可迭代对象(如set,di ...

最新文章

  1. 全国计算机等级考试 简称NCRE,长春大学2018年下半年全国计算机等级考试(简称NCRE)招生简章...
  2. Maximal Rectangle leetcode java
  3. 与殿堂级大师隔空对话——一张纸是怎么限制了我们的想象力
  4. JavaScript 属性介绍
  5. python计算工资编程-老男孩学Python编程后薪资待遇高吗?
  6. JAVA 遍历文件夹下的所有文件
  7. Go语言 channel 管道 阻塞 死锁 经典问题
  8. 计算机一级在线模拟试题,全国计算机等级考试一级模拟试题及答案解析
  9. 计算机软件怎么装,电脑拷贝的软件怎么安装
  10. Vm虚拟机Deepin安装教程---kalrry
  11. 使用videojs播放rtmp视频
  12. 小程序、容器、SCF、直播加速…最全面的云端架构技术揭秘
  13. 微信好友突破10000人,节跳动即将取消饮料补贴福利!!
  14. Windows10软件显示模糊解决方案
  15. 移卡参投的乐享互动首日破发:旗下乐刷罚单不断,逾期率高居不下
  16. 微信小程序开发入门(连载)—— 开发前的准备工作
  17. 计算机开模拟器,iOS在同一台电脑上打开多个模拟器
  18. 思维导图超级学习力提升宝典
  19. apicloud模块和html,APICloud模块开发打包
  20. 响应式网站设计(2)-关于网站制作你不知道的那些文件儿

热门文章

  1. android 7.0电视,将智能电视升级到Android 7.0有什么经验?为索尼用户祝福
  2. oracle 循环继续,oracle – 是否可以继续从异常循环?
  3. 大内存 php 干什么好 centos,解决CentOS7中php-fpm进程数过多导致服务器内存资源消耗较大的问题...
  4. python使用sqlalchemy判断数据库是否包含某张表
  5. python列表转dict
  6. pytorch 构造读取数据的工具类 Dataset 与 DataLoader (pytorch Data学习一)
  7. scrapy使用(无头)浏览器爬取动态网页
  8. opencv ppt效果_opencv几何图形画法
  9. 为什么preparedstatement能防止sql注入_使用Python防止SQL注入攻击的实现示例
  10. Kubernetes架构及相关服务详解