Python __name__与“__main__“是什么意思?

2023-11-09

前言

模块文件的底部,我们经常看见__name__与"__main__"的代码,如下

if __name__ == "__main__":
    pass

而__name__ == "__main__"的结果可能是True、也可能是False,这是为什么呢??

__name__ 与"__main__"分别是什么?

__name__是当前模块的一个属性,属性名称的前后各有两个_修饰,表明它是一个内置属性(也称内置变量),表示当前模块的名称

"__main__"是一个字符串对象,"xx",一对双引号是创建字符串对象的快捷方式,也称为字符串字面量

==是什么呢?

== 用来比较对象的内容是否相等!

__name__=="__main__" 写在一起表示什么呢?

当前模块的__name__属性值是否等于字符串"__main__",如果__name__的值等于"__main__"则返回True、如果__name__的值不是"__main__",则返回False

__name__的值什么时候等于"__main__"呢??

如果当前模块是Python程序的入口模块(也称顶级模块、脚本文件),则当前模块的__name__属性的值是"__main__"

举个例子

1、先定义一个模块:my_first.py

2、然后命令行执行:python my_first.py

3、此时my_first模块的__name__属性值是"__main__"

__name__属性的值不是"__main__"时,会是什么?

如果当前模块不是程序的入口模块(顶级模块),__name__属性的值是"当前模块名",说明当前模块是被其他模块导入时运行的!

举个例子

1、先定义一个模块:my_first.py

2、再定义一个模块:main.py,下面有一个import语句,导入my_first模块

import my_first

3、此时my_first模块的__name__属性值是"my_first"

__name__=="__main__"经常用来干嘛??

1、做脚本:如果当前模块是程序的入口模块(顶级模块),则是作为程序执行的入口,此时的模块文件作为脚本独立运行,__name == "__main__"的代码块中执行想执行的代码,哈哈

2、做测试:如果当前模块不是入口模块,我们也可以利用模块作为程序的入口特性做测试工作,在 if __name__ == "__main__"修饰的代码块中调用一些测试代码,同样还是想执行的代码,哈哈

总结

1、每个Python模块(.py结尾的Python模块文件)都包含内置变量__name__(也称内置属性),它代表当前模块的名字

2、当模块作为程序入口执行时,即作为脚本程序执行时,__name__值等于"__main__"

3、当模块import到其他模块执行时,__name__的值等于"模块名"(注意:不包含模块文件的后缀.py)

4、模块作为程序入口执行时,即作为脚本执行时,__name__ == '__main__'的结果为True,此时在if代码块中的语句可以运行!

5、模块import到其他模块执行时,__name__ == '__main__'的结果为False,因为此时__name__的值为模块名称(不含.py),此时在if代码块中的语句并不会执行!

6、看不懂没关系,多看几遍就懂了………………

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python __name__与“__main__“是什么意思? 的相关文章

  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • Python tcl 未正确安装

    我刚刚为 python 安装了graphics py 但是当我尝试运行以下代码时 from graphics import def main win GraphWin My Circle 100 100 c Circle Point 50
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • 如何将 PIL 图像转换为 NumPy 数组?

    如何转换 PILImage来回转换为 NumPy 数组 这样我就可以比 PIL 进行更快的像素级转换PixelAccess允许 我可以通过以下方式将其转换为 NumPy 数组 pic Image open foo jpg pix numpy
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9

随机推荐

  • node.js(第七章)登录鉴权的方式一Cookie&Session

    1 Cookie Session HTTP 无状态 我们知道 HTTP 是无状态的 也就是说 HTTP 请求方和响应方间无法维护状态 都是一次性的 它不知道前后的请求都发生了什么 但有的场景下 我们需要维护状态 最典型的 一 个用户登陆CS
  • Linux基础笔记15

    文本处理 wc 用于统计文件的字节数 单词数 行数等信息 并将统计结果标准输出到终端 w 统计单词数 c 统计字节数 l 统计行数 m 统计字符数 L 显示最长行的长度 help 显示帮助信息 version 显示版本信息 root iZr
  • PHP静态绑定知识点学习记录

    最近在学习JAVA基础中关于静态方法的知识 回想起PHP可以使用self 或者static 两种方式来进行静态方法的调用 有些忘记两者的差异 因此 做一下学习记录 后期绑定 的意思是说 static 不再被解析为定义当前方法所在的类 而是在
  • Linux 学习笔记1 安装linux详细教程

    系统 CentOS 8 1 1911 x86 64 dvd1 软件 VMware Workstation Pro 16 安装centos VM安装的步骤 1 去BIOS里修改设置开启以常交 f2 f10 2 安装虚拟机软件 vm15 5 演
  • QT(qCompress和qUncompress)与zlib(compress和uncompress)相互调用

    因为QT也是用zlib库的 所以理论上数据是可以直接互通的 但现实是残酷的 通过对qCompress和compress压缩的数据进行打印 可以知道qCompress比compress的数据长四个字节 而这四个字节的内容则未压缩前的数据长度
  • 解决图像目标检测两框重叠问题

    文章目录 1 问题现象 2 解决办法 3 Non Maximum Suppression 原理 3 1 什么是非极大值抑制 3 2 为什么要用非极大值抑制 3 3 如何使用非极大值抑制 3 4 效果 4 参考资料 1 问题现象 使用yolo
  • SpringBoot注解详解:从核心到Web,从数据到测试,一网打尽

    总结的了平时学习springboot常用的一些注解 方便以后开发时可以阅览回忆 springboot的常用注解可以分为以下几类 核心注解 这些注解是springboot的基础 用于启动 配置和管理springboot应用 Web MVC注解
  • 使用SurfaceView加载多张大分辨率图片做帧动画,解决OOM问题

    项目需求 动态背景 需求很简单 只是用帧动画做一个动态的背景而已 但若是70多张图片都是1920 1080 一张485k的话 传统意义上的帧动画就很难实现了 往往加载10张就开始OOM 一般来说 常用的实现动态背景的有效方式有三种 视频 果
  • JVM系列-第12章-垃圾回收器

    垃圾回收器 GC 分类与性能指标 垃圾回收器概述 垃圾收集器没有在规范中进行过多的规定 可以由不同的厂商 不同版本的JVM来实现 由于JDK的版本处于高速迭代过程中 因此Java发展至今已经衍生了众多的GC版本 从不同角度分析垃圾收集器 可
  • Android 腾讯Bugly的应用升级&热更新

    经过去年的九月份至现在 发现自己很久没有写过比较好的文章了 今天就趁着通宵的劲 写一下对腾讯Bugly的应用升级 热更新的理解 希望对新手有所帮助 有兴趣的可以了解下 没兴趣的也可以看完之后吐槽我 Bugly 文档中心 https bugl
  • java 栈的使用

    Stack的基本使用 初始化 Stack stack new Stack 判断是否为空 stack empty 取栈顶值 不出栈 stack peek 进栈 stack push Object 出栈 stack pop 实例 public
  • USB摄像头接树莓派里GPIO是算输入还是输出

    USB摄像头接树莓派里GPIO是算输入还是输出 从程序可以看出来吗
  • Tkinter 组件详解(十一):Text

    Text 文本 组件用于显示和处理多行文本 在 Tkinter 的所有组件中 Text 组件显得异常强大和灵活 适用于多种任务 虽然该组件的主要目的是显示多行文本 但它常常也被用于作为简单的文本编辑器和网页浏览器使用 何时使用 Text 组
  • Linux安装elasticsearch(5.5.2)、head插件以及ik分词器

    Linux里安装elasticsearch 首先需要安装JDK 对于elasticsearch5版本以上的一般使用JDK1 8以上的版本 一 安装JDK 首先检查Linux系统是否安装过jdk 如果安装的是1 8以下的版本 可以删除再安装新
  • Grafana配置https

    目录 1 Yum安装Grafana 2 生成自签名证书 3 Grafana配置https使用自签名证书 4 浏览器访问测试 5 在终端查看连接情况 1 Yum安装Grafana 配置grafana yum源安装grafana最新版本 8 0
  • 51信用卡管家app产品需求文档

    文章通过使用 体验 研究等方式倒推51信用卡管家APP 通过使用axure撰写PRD文档 51信用卡业务很多 文章只撰写部分核心功能点 另外 51信用卡通过和第三方合作 开展了账单导入 办信用卡 借款 投资理财等业务 文中如有相关错误 望指
  • maven3(https://maven.aliyun.com/nexus/content/groups/public)‘ to redirect to a secure protocol (like

    Android Flutter Gradle allowInsecureProtocol 错误 A problem occurred configuring root project example gt Could not resolve
  • Postman :Tests(后置脚本)提取请求Headers的参数值

    代码详解 一 变量 Content Type 存储获取数据 var Content Type pm request headers get Content Type 二 打印提取的请求 Headers 的 Content Type 字段值
  • vue增加数据导出excel(vue-json-excel)

    1 下载安装vue json excel 相当于命令npm install save vue json excel 或者命令npm install vue json excel S 2 创建js文件引入并全局注册标签 import Vue
  • Python __name__与“__main__“是什么意思?

    前言 模块文件的底部 我们经常看见 name 与 main 的代码 如下 if name main pass 而 name main 的结果可能是True 也可能是False 这是为什么呢 name 与 main 分别是什么 name 是当