一文弄懂 if __name__ == “__main__“:(洒洒水啦!)

news/2024/5/19 0:11:05 标签: 人工智能, python3.11, python, 强化学习

        本篇文章是博主在AI、无人机、强化学习等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学习

       AI学习笔记(2)---《一文弄懂 if __name__ == "__main__":(洒洒水啦!)》

一文弄懂 if __name__ == "__main__":(洒洒水啦!)

目录

1 举例看看:

小刚视角,即gang.py   

小红视角,即hong.py

2 深入看看:

3 再往前走走:


        大部分初学者在阅读python代码的时候,可能会看到 if __name__ == "__main__": 这行代码,对于这行代码可能不太了解,特别是对于从C、C++、 Java、C# 等编程语言学习转到Python学习的时候(哈哈,我就是其中的一位)。

        先不解释这行代码所代表的含义,咱们先举个实例。

1 举例看看:

        小刚的好朋友小红约小刚明天去吃螺蛳粉,小刚喜欢小红,一时口顺答应了,but小刚其实是不太想去吃的。

        把小刚和小红都作为一个.py文件。现在小红和小刚都要执行了明天去吃螺蛳粉的事件,我们用print打印出来。

小刚

gang.py

python">#小刚
print("小刚明天去吃螺蛳粉")

小红

hong.py 

python">#小红
print("小红明天去吃螺蛳粉")

小刚视角,即gang.py   

        由于小刚不想去吃螺蛳粉,小刚又不想让小红知道,小刚就只能心里想想。

        心里想的话就放在  if __name__ == '__main__': 后面

        在gang.py加上

        if __name__ == '__main__':

        后面执行他所想的事情

python">#小刚
print("小刚明天去吃螺蛳粉")

if __name__ == '__main__':
    print('小刚心里想:不想吃螺蛳粉')

 运行结果:

我们可以看到这里执行了 if __name__ == '__main__': 后面的 print,打印出了

小刚心里想:不想吃螺蛳粉


小红视角,即hong.py

小红邀请了小刚吃螺蛳粉,将这个动作认为使用 import 导入了 gang.py

python">#小红
import gang
print("小红明天去吃螺蛳粉")

 运行结果:

可以看到,小红只知道小刚和自己要去吃螺蛳粉,而不知道小刚的真实想法。

        小刚心里想:不想吃螺蛳粉。

        从代码层面上来说,hong.py使用 import 调用gang.py时。

        if __name__ == '__main__':之前的语句被执行,之后的没有被执行。


2 深入看看:

我们在gang.py脚本的if __name__=="__main__":之前使用 print 将 __name__ 打印出来,

python">#小刚
print("小刚明天去吃螺蛳粉")
print(__name__)
if __name__ == '__main__':
    print('小刚心里想:不想吃螺蛳粉')

运行结果如下:

再执行 hong.py 呢?运行结果如下:

可以观察到:

  • gang.py执行后变量__name__的值为"__main__"
  • hong.py执行后变量__name__的值为"gang"。回归到 if 条件判断本身,因为不满足__name__=="__main__"的条件,因此,无法执行其后的代码。

原理如下:

        由于每个Python文件都包含内置的变量__name__,当运行模块被执行的时候,__name__等于文件名(包含了后缀.py)。

        如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)。

        “__main__”等于当前执行文件的名称(包含了后缀.py)。(“__main__” = 文件名.py

        所以当模块被直接执行时,__name__ == '__main__' 结果为真;而当模块被import到其他模块中时,__name__ == '__main__'结果为假,就是不调用对应的方法。

        简而言之就是:__name__ 是当前模块名,当模块被直接运行时,用 __main__ 代表模块名,if 判断满足,后面代码将被运行。

        当模块是被导入时,if 判断不满足代码不被运行。


3 再往前走走:

        涉及到了一个程序入口的概念

        对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++, Java,C# 等。

        其中C 和 C++ 都需要有一个 main 函数来作为程序的入口,也就是程序的运行会从 main 函数开始。同样的,Java 和 C# 则必须要有一个包含 Main 方法的主类来作为程序入口。

        但和C,C++、Java 以及 C# 等有所不同的是,Python属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,python是动态的逐行解释运行,也就是从脚本第一行开始运行,没有统一的入口。

另外,python文件有两种使用方法:

  1. 第一种:直接作为脚本执行
  2. 第二种:import到其他的python脚本中被调用(模块重用)执行,也就是作为模块(库)被导入执行

       但是,不管是直接运行还是导入,最顶层的代码都会被运行(Python 用缩进来区分代码层次)。但实际使用过程中,python文件作为模块被其它python脚本调用执行的时候,有的代码我们是不希望被运行的。

        而if __name__ == '__main__' 的作用就是定义这两种情况执行代码的执行方式,在该语句下的代码只有在文件作为脚本直接执行情况下才会被执行,而import到其他脚本中是不会被执行的。


那么弄懂了吗?朋友们

本文部分内容抄录和借鉴下面两篇文章,大家可以看看:

Python编程中的if __name__ == 'main' 的作用和原理

if __name__ == ‘__main__‘的详细讲解

     文章若有不当和不正确之处,还望理解与指出。由于部分文字、图片等来源于互联网,无法核实真实出处,如涉及相关争议,请联系博主删除。如有错误、疑问和侵权,欢迎评论留言联系作者,或者关注VX公众号:Rain21321,联系作者。


http://www.niftyadmin.cn/n/5074372.html

相关文章

canvas 入门

canvas 入门 canvas是干什么的&#xff1f;canvas 绘制直线canvas画虚线canvas 绘制三角形canvas 绘制正方形canvas 绘制圆形、圆弧与椭圆canvas绘制文本canvas绘制图片 canvas是干什么的&#xff1f; <canvas> 是HTML5中的标签&#xff0c;它是一个容器&#xff0c;可以…

背包问题学习笔记-分组背包

题意描述&#xff1a; 有 N 组物品和一个容量是 V 的背包。每组物品有若干个&#xff0c;同一组内的物品最多只能选一个。每件物品的体积是 vij&#xff0c;价值是 wij&#xff0c;其中 i 是组号&#xff0c;j 是组内编号。求解将哪些物品装入背包&#xff0c;可使物品总体积不…

【Java acm】特殊输入

input: [[1,2,3 ], [4, 5,6], [7,8]] output: [[1, 2, 3], [4, 5, 6], [7, 8]] 思路 按行读入, 然后进行字符串处理, 将其他字符替换为空字符.在split(,) repalceAll(“\s”,“”), 将所有空白字符替换成空字符(包括空格, 制表, 换行等) 代码实现 import java.util.*;publ…

详解性能测试(2023最新版)

1.什么是性能测试 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试&#xff0c;两者可以结合进行。通过负载测试&#xff0c;确定在各种工作负载下系统的性能&#xff0c;目标是测试当负…

Python生成ASCII艺术:将文字演绎成视觉盛宴

文章目录 介绍安装使用终端命令字体展示介绍 ASCII艺术也被称为“计算机文本艺术”,它涉及将特殊字符有智慧地放置于字母之间,以制作出分布在多行文本上的视觉形状。今天和大家分享一个Python库,它可以将文本转换为ASCII艺术,让文字看起来更花哨。 运用场景:我们可以将ASC…

【arm实验1】GPIO实验-LED灯的流水亮灭

linuxlinux:~/study/01-asm$ cat asm-led.S .text .global _start _start: 1.设置GPIOE寄存器的时钟使能 RCC_MP_AHB4ENSETR[4]->1 0x50000a28 LDR R0,0X50000A28 LDR R1,[R0] 从r0为起始地址的4字节数据取出放在R1 ORR R1,R1,#(0x1<<4) 第4位设置为1 ORR R…

网络安全--安全认证、IPSEC技术

目录 1. 什么是数据认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段&#xff1f; 2. 什么是身份认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段&#xff1f; 3. 什么是VPN技术&#xff1f; 4. VPN技术有哪些分类&#xff1f; 5. IPSEC技术能够…

《有了这些可视化应用,再来一场亚运会也不怕!》

亚运会遇上中秋国庆千万大流量涌入城市&#xff0c;旅游、交通、应急消防等部门指挥中心人员&#xff0c;会如何运筹帷幄呢&#xff1f; 还记得刘涛在《开端》里&#xff0c;每次出场都在指挥中心&#xff0c;看着一堆大屏找线索。在早些年《人民的名义》里&#xff0c;汉东省的…