85. `if __name__ == “__main__“`的作用和原理(适合小白)

news2025/2/26 23:19:52

85. if __name__ == "__main__"的作用和原理(适合小白)

文章目录

  • 85. `if __name__ == "__main__"`的作用和原理(适合小白)
    • 1. 代码体验
    • 2. `__name__`的作用
      • 2.1 模块知识回顾
      • 2.2 `__name__`的作用
    • 3. `if __name__ == "__main__"`语句
      • 3.1 def语句自定义函数知识回顾
      • 3.2 代码解析
    • 4. 实操练习

1. 代码体验

在讲解知识之前,我们先体验if __name__ == "__main__"语句的代码输出效果。

【准备工作】

  1. 新建一个名为85的文件夹;

  2. 85的文件夹中新建2个py文件:一个命名为测试.py,另一个名为85.py

【在测试.py文件中编写代码】

a = 8000
print("a的值为:",a)

【终端输出】

a的值为: 8000

在85.py文件中编写代码】

import 测试

【总结】

观察输出结果,发现测试.py85.py的输出结果是一致。

【在测试.py文件中编写代码】

a = 8000
print("a的值为:",a)
print(__name__)

【终端输出】

a的值为: 8000
__main__

__name__的写法】

  1. 先敲2条小横线。

注意注意注意是2条短的小横线,不是长的那个横线哦!

  1. 在敲name

  2. 在敲2条小横线。

在这里插入图片描述

在85.py文件中编写代码】

import 测试

【总结】

观察输出结果,发现此时2个py文件输出的值已经不一样了。

测试.py输出的是:

a的值为: 8000
__main__

85.py文件输出的是:

a的值为: 8000
测试

为什么增加了一个__name__2个py文件输出结果就不一样了呢?

为什么输入的是__name__输出的却是__main__呢?

我们来看看__name__有什么神奇的地方?

2. __name__的作用

2.1 模块知识回顾

模块是几个函数和类的集合。

在Python中一个py文件就是一个模块。

在这里插入图片描述

Python模块(每个.py文件)里可以写入一段可以直接执行的程序(也称为脚本),也可以定义一些变量、类或函数,让别的模块导入和调用,类似于库函数。

但不是所有程序员都是大公无私愿意把自己所有的代码都分享给其他人的。

有的程序员他写完了.py文件,他也愿意给你分享他的成果,但不是全部。

假设他只让你调用它80%的代码,另外20%是他要保护起来,不给你调用,那这个时候就可以用系统变量__name__来保护它另外20%的代码。

2.2 __name__的作用

在我们创建.py文件时程序会自动加载一些系统变量,__name__就是其中之一。

__name__的作用是显示当前程序运行在哪一个模块中。

__name__ 它可以标识模块的名字,可以显示一个模块的某功能是被自己执行还是被别的文件调用执行。

main [meɪn]:主要的。

【概括如下】

1.如果运行的是自己写的模块,那__name__ 等于'__main__'

2.当文件被当做模块导入时其他文件时:__name__等于文件名(模块名)。

一个py文件就是一个模块。

85.py是Python的一个模块。

测试.py也是Python的一个模块。

测试.py文件中用print函数输出__name__属性值,输出的是__main__。这是因为它运行的是自己的模块,我们也可以称为主程序入口。

85.py文件中,输出的是测试,即调用的模块名。因为85.py文件调用的是测试.py文件。因此输出的是模块名测试

3. if __name__ == "__main__"语句

if __name__ == "__main__"是Python中的一个特殊语句。

用于判断当前模块是否是主程序入口,即运行的是自己的模块还是调用的其他模块。

main [meɪn]:主要的。

如果当前模块是主程序入口,则执行if语句块中的代码。

如果当前模块是被其他模块导入的,则不执行if语句块中的代码。

【概括如下】

  1. .py文件作为脚本运行时,if __name__ == '__main__' 中的代码会被执行。

  2. .py文件是被import语句调用到其他.py文件中时,if __name__ == '__main__':中的代码不会被执行。

【在测试.py文件中编写代码】

def  he():
    a = 4
    print(a+a)
if __name__ == "__main__" :
    he()

【终端输出】

8

在85.py文件中编写代码】

import 测试

测试.py文件终端输出的是8

在85.py文件终端是没有任何输出的。

分析代码前,我们先回顾下自定义函数的语法。

3.1 def语句自定义函数知识回顾

【参考链接如下】

54.python的def语句自定义函数

【自定义函数的语法】

在这里插入图片描述

def语句自定义函数由7部分组成:

  1. 关键字 def

define[dɪˈfaɪn]:定义。

def 是 define 的缩写,def为子定义函数的关键词。

  1. 函数名。

函数名和变量名一样,也是自己命名的。

  1. 形式参数。

  2. 英文冒号:

  3. 四个空格的缩进。

  4. 函数体。

函数体就是我们要实现的功能。

  1. return后接返回值。如果没有要返回的值,return可以省略。

【函数的调用语法】

函数名(参数)

参数可以有,也可以没有。

调用函数的语法非常简单,函数名加参数即可。

3.2 代码解析

【源代码】

def  he():
    a = 4
    print(a+a)
if __name__ == "__main__" :
    he()

【代码解析】

def  he():

def关键字自定义了一个函数。

函数名为he

【温馨提示】

  1. 自定义函数没有参数时也必须有英文圆括号。

  2. 括号后紧跟英文冒号:

  3. 自定义函数要严格遵循冒号和四个空格的缩进语法。

a = 4

定义了一个变量a,并给a赋值为4。

注意该语句前有4个空格的缩进。

print(a+a)

print(a+a)就是自定义函数he的函数体。

自定义函数he要实现的功能就是求2个a的和。

【温馨提示】

自定义函数的特点是写好备用。

自定义函数要有调用语句才会执行函数里面的代码。

if __name__ == "__main__" :

增加这个判断语句就是判断运行的模块是否是主程序入口。

如果是主程序,__name__ 等于'__main__',那么程序执行if条件判读语句下面的代码块。

he()

条件成立,则执行he()语句。

这是一个函数调用语句,语法为函数名()

【总结】

如果上面的if语句成立,则调用he函数,调用he函数,才会执行里面的print语句,才会有值输出。

而在85.py文件中,它是调用测试.py模块。

.py文件是被import语句调用到其他.py文件中时,if __name__ == '__main__':中的代码不会被执行。

85.py模块同样也是运行的测试.py文件中的代码,但在85.py中if 条件语句不成立,则he()没有被调用,因此没有任何输出。

【总结】

这就是`if name == 'main’语句的作用:用于判断当前模块是否是主程序入口。

学到这里其实大家能理解该if语句的解语法和输出效果,但大家会感觉到判断了主程序好像也没什么作用。

我们现在接触的都是单个py文件,即单个模块。但当我们需要完成大型的项目,需要对多个py文件进行打包处理时,该if条件判断语句会起到非常关键的作用。最简单的描述就是它可以锁定主程序中的变量、函数等等不被其他调用模块所改变,从而避免变量名重复带来的错误。

但其实不仅仅如此,上面的表述也不完全准确,只是帮助大家理解而已。

4. 实操练习

【目标任务】

输入两个整数a,b,输出两个数加、减、乘、幂运算的结果。

【输入】

请输入整数a

请输入整数b

【备注】因为有幂运算,b的数值尽量小于5。

【输出】

第一行输出a +b的结果

第二行输出a - b 的结果

第三行输 a * b 的结果

第四行输 a ** b 的结果

【幂运算如下】

print(2**2)
print(2**3)
print(2**4)
print(2**5)

【终端输出】

4
8
16
32

a ** b中的b表示次方数。

2**5的表示2的5次方。

【示例】

输入

3

2

输出

5

1

6

9

【体验代码】

calculate[ˈkælkjuleɪt]:计算,运算。

def cal(a,b):
    # 在此处输入你的代码
    print("a+b=",a+b)
    print("a-b=",a-b)
    print("a*b=",a*b)
    print("a**b=",a**b)

if __name__ == '__main__':
    a = int(input("请输入整数a的值:"))  # 输入后用int函数将字符串转为整数
    b = int(input("请输入整数b的值:"))  # 输入后用int函数将字符串转为整数
    cal(a,b)        # 调用你定义的函数进行数学运算

【终端输出】

a+b= 5
a-b= 1
a*b= 6
a**b= 9

【代码解析】

def cal(a,b):

自定义了一个函数cal,参数为a和b。

# 在此处输入你的代码
print("a+b=",a+b)
print("a-b=",a-b)
print("a*b=",a*b)
print("a**b=",a**b)

自定义函数的函数体,功能是实现两个整数加、减、乘、幂运算的结果。

if __name__ == '__main__':

if条件判断语句,判断是否在主程序中运行,这里可以不加的。

a = int(input("请输入整数a的值:"))  # 输入后用int函数将字符串转为整数
b = int(input("请输入整数b的值:"))  # 输入后用int函数将字符串转为整数

用input函数实现从终端输入整数的值。

注意input函数得到的是字符串变量,要用int函数将字符串数据转换为整数类型数据。

cal(a,b)        # 调用你定义的函数进行数学运算

【函数的调用语法】

函数名(参数)

cal(a,b)调用我们定义的函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/520657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

水果手机SJ流程

注册教程 第一步:注册新邮箱。 首先,你需要一个邮箱账号,国内126.QQ.163等都可以,只要你没有用它注册过AppleID。 第二步:注册。 复制链接到浏览器,打开进入appleID注册界面:https://appleid.apple.com/account#!&…

采用UWB(超宽频)技术开发的java版智慧工厂定位系统源码

室内定位系统源码,采用UWB定位技术开发的智慧工厂定位系统源码 技术架构:单体服务 硬件(UWB定位基站、卡牌) 开发语言:java 开发工具:idea 、VS Code 前端框架:vue 后端框架:s…

Linux内核(十七)Input 子系统详解 IV —— 配对的input设备与input事件处理器 input_register_handle

文章目录 input_handle结构体详解配对的input设备与input事件处理器实例input核心层对驱动层和事件层之间的框架建立流程图 本文章中与input子系统相关的结构体可参考input子系统结构体解析 input函数路径:drivers/input/input.c input_handle结构体详解 input_ha…

算法之美:探究左右元素和的差值

本篇博客会讲解力扣“2574. 左右元素和的差值”的解题思路,这是题目链接。 先来审题: 以下是输出示例: 以下是提示: 本题的关键在于,“左和”和“右和”是如何变化的。下面我通过代码来演示。 一上来,…

唐朔飞计算机组成原理常见的寄存器(时不时就更新)

EINT中断允许触发器 如果是1代表开中断就是可以中断 如果0表示关中断 不能触发中断程序,1.响应中断的条件是当设备有请求并且 中断允许触发器为1的时候 时间是指令执行周期结束的时候。2.实现多重中断的条件是 中断允许触发器置为1并且 有更高的服务程序才能除法多重…

【数据结构】- 几个步骤教你认识并实现一个链表之带头(哨兵位)双向循环链表(上)

文章目录 前言🌟一、带头双向循环链表🌟二、带头双向循环链表结构图:🌟三、带头双向循环链表代码实现:🌏3.1头插:💫3.1.1头插流程图💫3.1.2 相较于无头单向非循环链表&am…

高边输出和低边输出

文章目录 高边和低边高边驱动(HSD,High Side Drive)和低边驱动(LSD,Low Side Drive)应用示例举例高/低边驱动芯片 按照开关闭合时开关输出的电压高低,可以分为高边输出和低边输出开关。 高边和低…

ubuntu 20.04 通过 sshfs 共享文件夹到 windows

功能需求 最近需要 让 ubuntu 共享文件夹,windows 来映射成磁盘或者共享目录的方式使用 windows 的文件夹可以通过 VMware Workstation Pro 虚拟机【共享文件夹】设置,轻松的实现 文件共享,不过这里的共享是 单向的,也就是 文件夹…

Windows服务器加固

文章目录 一、 账户安全要求二、 权限安全要求三、 通用安全管理四、 日志审计安全五、网络协议安全 一、 账户安全要求 1、 账户错误登录锁定 次数(8) 开始->运行->输入“gpedit.msc”打开本地组策略编辑器,浏览 路径:“…

快来学习SQL数据库,MySQL的保姆级安装,MySQL的入门使用以及DBeaver软件的安装

SQL数据库 无处不在的SQL,不管是何种开发语言,亦或是何种开发方向,SQL都是开发人员无法绕开的话题。除了一门趁手的编程语言外,SQL语言也是开发人员人人必备的开发技能。 数据库有三个层级:库——表——数据 市面上的…

路径规划算法:基于斑点鬣狗优化的路径规划算法- 附代码

路径规划算法:基于斑点鬣狗优化的路径规划算法- 附代码 文章目录 路径规划算法:基于斑点鬣狗优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…

第五十八章 Unity 发布PC平台

本章节我们介绍一些如何打包游戏到PC平台,这里重点介绍如何制作Windows操作系统下的游戏包。首先,我们创建一个“PcDemo”工程,然后简单布置一下场景内容,如下 想要打包发布Unity项目,我们可以在菜单栏选择“File”→ …

PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用

PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用 PHP 面向对象1.构造函数2.析构函数3.继承4.方法重…

520到了还有人不会表白吗——Python GUI实现爆火抖音的弹窗表白

文章目录 源码1.正常版本2.BT(变态)版本 代码实现(正常版本)结束语 最近抖音爆火的窗口表白 心中的女孩如果收到了,肯定会看着满屏幕的窗口感动不止,对你倾心 本文是正常版本的源码,BT版本的源码链接待审核 源码 1.正常版本 点击喜欢或者不喜…

【Linux】KMP算法

目录 主题 橙色 主题 好了,解释清楚这个表是什么之后,我们再来看如何使用这个表来加速字符串的查找,以及这样用的道理是什么。如图 1.12 所示,要在主字符串"ababababca"中查找模式字符串"abababca"。 如果在…

源码解读guava cache get方法的秘密

guava cache是谷歌开源的一种本地缓存,实现原理类似于ConcurrentHashMap,使用segments分段锁,保证线程安全,支持高并发场景。同时支持多种类型的缓存清理策略,包括基于容量的清理、基于时间的清理、基于引用的清理等。…

嵌入式系统中常见的摄像头接口

MIPI CSI:MIPI CSI(Mobile Industry Processor Interface Camera Serial Interface)是一种专用于手机和移动媒体设备的摄像头接口标准。它具有高速传输、低功耗和可靠性等优点,已经成为现代嵌入式摄像头的主要接口之一。 USB cam…

day31_JDBC

今日内容 零、 复习昨日 一、数据库连接池 二、反射 三、封装DBUtil 零、 复习昨日 三表关联 create table teacher ( tid int, tname varchar(10) ) insert into teacher values(1,老邱); insert into teacher values(2,老王);-- 三表关联 -- 查询学生以及班级信息 select * f…

FPGA实现Cordic算法求解arctan和sqr(x*2 + y* 2)

一. 简介 由于在项目中需要使用的MPU6050,进行姿态解算,计算中设计到**arctan 和 sqr(x2 y 2),**这两部分的计算,在了解了一番之后,发现Cordic算法可以很方便的一次性求出这两个这两部分的计算。另外也可以一次性求出sin和cos的…

MHA高可用配置及故障切换

单组mha 多组mmm mha (master high availability) mha解决mysql单点的问题 mysql故障切换的过程中最大程度上保证数据的一致性,一达到真正意义上的高可用 mha组成 mha node(数据节点) mha node 运行在每个mysql服…