首页 > 编程语言 >【Python】main函数 if name=='main' 详解

【Python】main函数 if name=='main' 详解

时间:2023-03-11 16:22:39浏览次数:38  
标签:__ name Python py 模块 test main

引言

  • Python代码
print('hellow word')
  • 代码执行顺序

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

    • Python不需要Main函数也能执行

    • Python不同于其他编程语言,Python是解释性语言,不需要先编译成二进制语言,再执行

    • Python是动态,是从上至下逐行解释运行。只要有正确的代码,python便可以执行该文件

  • 程序入口:

    • 很多的的编程语言像C/C++/C#/JAVA 等 都会有一个main主函数 作为程序入口,程序从

      main()主函数的第一句代码开始执行,直到main函数的最后一句代码程序运行结束

    • 而Python 因为它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,

      而是动态的逐行解释运行。也就是从脚本第一行开始运行,没有统一的入口,直到脚本

      的最后一行。

案例

1、写一个测试模块(test.py)

def addfunc(a, b):
    return a + b

print('test:a+b的计算结果是:', addfunc(2, 3))

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

import test

print("调用test模块执行的结果是:",test.addfunc(3,3))
  • 运行test.py结果如图所示:

  • 运行mode.py文件

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

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

3、这时我们修改一下test.py的代码

  • test.py

    def addfunc(a, b):
        return a + b
    
    print('test:a+b的计算结果是:', addfunc(2, 3))
    
    
    if __name__ == '__main__':
        print('test:1+1的计算结果:',addfunc(4, 4))
    
  • 再次运行test.py

    • 程序运行正常

  • 再次运行mode.py

    • 程序运行正常

详解

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

    • 直接作为脚本运行

    • 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主程序 。

标签:__,name,Python,py,模块,test,main
From: https://www.cnblogs.com/dream-ze/p/17206313.html

相关文章

  • Python 网络爬虫
    必考点1.导入库2.定义变量url=''''link=''''headers={user-agent:} 3.执行代码r=requests.get('''地址''',headers=headers,timeout=10)response.html ......
  • 让Python PYQT5使用微软流畅设计体系UI
    PyQt-Fluent-Widgets项目地址: https://github.com/zhiyiYo/PyQt-Fluent-Widgets总所周知,Python一般的UI(比如Tkinter)肥肠的丑陋,肥肠的不现代化。蛋是现在微软有流畅设......
  • python-字典
    字典特点符号:{}关键字:dict保存的元素是:key:value一对数进行操作定义定义空字典方式一:dict1={}方式二:dict2=dict()/列表和元组都都可以用这种方式:list1=lis......
  • python 实现多语种检测
    首先安装如下包:pipinstalllangdetect然后新建一个python文件,重命名为detect.py,粘贴进如下案例代码:fromlangdetectimport*DetectorFactory.seed=0txt="......
  • centos 安装python3后yum报错
    问题centos安装python3后,并且把/usr/bin/python软链接到python3后,yum命令报错原因:yum命令依赖于python2,导致报错解决方法:修改/usr/bin/yum文件的第一行p......
  • Python 爬虫实战—热门视频排行榜
    基于python的requests、BeautifulSoup4第三方库,对哔站全站范围热门视频排行榜前一百实时爬取。importrequestsfrombs4importBeautifulSoupfile=open("hot100......
  • Python调用Motrix下载器下载
    打开Motrix运行importrequests,jsonjsonreq=json.dumps({'jsonrpc':'2.0','id':'qwer','method':'aria2.addUri',......
  • 实验1-python·开发环境使用和编程初体验
    实验任务1(1)实验源码:1#print输出的几种用法23#用法1:用于输出单个字符串或单个变量4print('hey,u')56#用法2:用于输出多个数据项,用逗号分隔7print('......
  • 使用python实现高光谱图像绘制 -----高光谱篇
    Python 已经有足够的包可以实现高光谱图像的绘制和各种精确显示。现总结python实现.mat资源文件的高光谱图像显示方案。需要准备python3.10及以下版本,目前高光谱显示所......
  • #一入python深似海,从此妹纸是路人(一)
    1.什么事编程,什么事编程语言?编程:用代码编写程序编程语言:用哪种语法规则来编写程序a=10=>0101010(exe)2.编程语言分类1.编译型:C,GO一次性把源代码进行翻译......