【Python 基础篇】Python中的 __name__ == ‘__main__’ 详解

2023-11-02

学习过C语言或者Java语言的盆友应该都知道程序运行必然有主程序入口main函数,而python却不同,即便没有主程序入口,程序一样可以自上而下对代码块依次运行,然后python不少开源项目或者模块中依然存在 __name__ == “__main__” 这种写法,具体是上面意思呢?

一. 语义解释

1.  关于 __name__

__name__ 是python的内置属性,是系统全局变量!每一个py文件都有一个属于自己的__name__。

但有个使用规则,请注意如下两点:

(1)如果py文件作为模块被导入(import),那么__name__就是该py文件的文件名(也称模块名)

(2)如果py文件直接运行时,那么__name__默认等于字符串”__main__”

简单的例子,打比方:

假如你名字是张三,在朋友眼中,你是张三(__name__ == '张三');在你自己眼中,你是你自己(__name__ == '__main__')

2.  关于__main__

“__main__” 实际上就是一个字符串,用来鉴别程序入口,没有太多花里胡哨的东西.

3.  关于 __name__ == “__main__”

当.py文件被直接运行 (Ctrl+Shift+F10)时, if __name__ == “__main__” 之下的代码块将被运行,该语句就相当与python的main主函数入口,示例代码如下:

a.新建一个 my_name.py 文件,作为模块文件:

# coding = utf-8
# 定义一个函数并打印 __name__
def prit_name():
    print("my_name.py __name__:", __name__)
 
if __name__ == "__main__":
    prit_name()

b.新建一个 python_main.py 文件,作为启动文件 (Ctrl+Shift+F10)

# coding = utf-8
# 导入 my_name 模块
import my_name
 
# 定义一个函数并打印 __name__
def prit_name():
    my_name.prit_name()
    print("python_main.py __name__:", __name__)
 
if __name__ == "__main__":
    prit_name()

  输出结果:

my_name.py __name__: my_name
python_main.py __name__: __main__

由此可见,作为启动文件 python_main.py ,该文件的内置属性 __name__ 等于 “__main__”,而my_name.py 作为导入模块,该模块的 __name__ 等于文件名(也称模块名字),所以my_name.py 中的 表达式 if __name__ == “__main__” 并不成立!

当直接将my_name.py作为启动文件时 (Ctrl+Shift+F10),输出:

my_name.py __name__: __main__

二. 代码作用

1.__name__ == “__main__” 作为启动py文件的main函数入口

2.一个项目中必然会包含多个模块文件,每个模块文件在自己写完代码之后会做一些简单的测试用于检测bug 或者 对自己的函数调用写一个简单的示例,而恰到好处的是:__name__ == “__main__” 既不会影响你的测试代码,也不会影响别人调用你的接口函数。

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

【Python 基础篇】Python中的 __name__ == ‘__main__’ 详解 的相关文章

  • 如何在 AWS CDK 创建的 Python Lambda 函数中安装外部模块?

    我在 Cloud9 中使用 Python AWS CDK 并且我部署简单的 Lambda 函数那应该是发送 API 请求到 Atlassian 的 API当对象上传到 S3 存储桶时 也是由 CDK 创建的 这是我的 CDK 堆栈代码 fr
  • python future 和元组解包

    实现像使用 future 进行元组解包这样的事情的优雅 惯用的方法是什么 我有这样的代码 a b c f x y g a b z h y c 我想将其转换为使用期货 理想情况下我想写一些类似的东西 a b c ex submit f x y
  • python 中的代表

    我实现了这个简短的示例来尝试演示一个简单的委托模式 我的问题是 这看起来我已经理解了委托吗 class Handler def init self parent None self parent parent def Handle self
  • 在 Tensorflow tf.nn.nce_loss 中出现 TypeError:'Mul' Op 的输入 'y' 的类型为 float32,与参数 'x' 的 int32 类型不匹配

    我正在研究 Tensor Flow 中的 Bag of Words 实现 并得到了 类型错误 Mul Op 的输入 y 的类型为 float32 与参数 x 的 int32 类型不匹配 在 tf nn nce loss 中 我尝试查看 tf
  • Python逻辑运算符优先级[重复]

    这个问题在这里已经有答案了 哪个运算符优先4 gt 5 or 3 lt 4 and 9 gt 8 这会被评估为真还是假 我知道该声明3 gt 4 or 2 lt 3 and 9 gt 10 显然应该评估为 false 但我不太确定 pyth
  • 将数据帧行转换为字典

    我有像下面的示例数据这样的数据帧 我正在尝试将数据帧中的一行转换为类似于下面所需输出的字典 但是当我使用 to dict 时 我得到了索引和列值 有谁知道如何将行转换为像所需输出那样的字典 任何提示都非常感激 Sample data pri
  • 如何在 pytest 中将单元测试和集成测试分开

    根据维基百科 https en wikipedia org wiki Unit testing Description和各种articles https techbeacon com devops 6 best practices inte
  • 填充两个函数之间的区域

    import matplotlib pyplot as plt import numpy as np def domain x np arange 0 10 0 001 f1 lambda x 2 x x 2 0 5 plt plot x
  • 为什么Python的curses中escape键有延迟?

    In the Python curses module I have observed that there is a roughly 1 second delay between pressing the esc key and getc
  • 从 python 发起 SSH 隧道时出现问题

    目标是在卫星服务器和集中式注册数据库之间建立 n 个 ssh 隧道 我已经在我的服务器之间设置了公钥身份验证 因此它们只需直接登录而无需密码提示 怎么办 我试过帕拉米科 它看起来不错 但仅仅建立一个基本的隧道就变得相当复杂 尽管代码示例将受
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • 按元组分隔符拆分列表

    我有清单 print L I WW am XX newbie YY ZZ You WW are XX cool YY ZZ 我想用分隔符将列表拆分为子列表 ZZ print new L I WW am XX newbie YY ZZ You
  • Seaborn Pairplot 图例不显示颜色

    我一直在学习如何在Python中使用seaborn和pairplot 这里的一切似乎都工作正常 但由于某种原因 图例不会显示相关的颜色 我无法找到解决方案 因此如果有人有任何建议 请告诉我 x sns pairplot stats2 hue
  • 在 pytube3 中获取 youtube 视频的标题?

    我正在尝试构建一个应用程序来使用 python 下载 YouTube 视频pytube3 但我无法检索视频的标题 这是我的代码 from pytube import YouTube yt YouTube link print yt titl
  • Pandas 根据 diff 列形成簇

    我正在尝试使用 Pandas 根据表示时间 以秒为单位 的列中的差异来消除数据框中的一些接近重复项 例如 import pandas as pd numpy as np df pd DataFrame 1200 1201 1233 1555
  • 无法在 osx-arm64 上安装 Python 3.7

    我正在尝试使用 Conda 创建一个带有 Python 3 7 的新环境 例如 conda create n qnn python 3 7 我收到以下错误 Collecting package metadata current repoda
  • 创建嵌套字典单行

    您好 我有三个列表 我想使用一行创建一个三级嵌套字典 i e l1 a b l2 1 2 3 l3 d e 我想创建以下嵌套字典 nd a 1 d 0 e 0 2 d 0 e 0 3 d 0 e 0 b a 1 d 0 e 0 2 d 0
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 具有自定义值的 Django 管理外键下拉列表

    我有 3 个 Django 模型 class Test models Model pass class Page models Model test models ForeignKey Test class Question model M
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li

随机推荐

  • 线性代数学习笔记4——矩阵的逆

    在进行矩阵的运算的时候 我们会发现我们没有定义矩阵的除法 但是经常又需要做类似的操作 因而我们引入矩阵的逆的概念 用以填补这个空白 矩阵的逆 由于我们在定义矩阵运算的时候只定义了数乘和矩阵乘法 而没有除法运算 和逆元的产生一样 我们为了定义
  • AutoDL算力平台租用GPU服务器+VSCode远程开发同步代码

    文章目录 一 关于租GPU服务器 二 使用XShell连接刚租的服务器 三 VSCode远程开发 四 VSCode SFTP插件实现本地代码与远程代码同步 一 关于租GPU服务器 理由 便宜好用 性价比高 https www autodl
  • Mybatis-plus3.5.1+版代码自动生成(FastAutoGenerator)

    该方法仅适用于mybatis plus 3 5 1 以上的版本 准备工作 Maven依赖 注意版本 该方法有可能因为版本的问题出现错误
  • 初学编程100个代码

    Java Python等主流编程语言如今火的不行 初学编程都有哪100个代码呢 笔者结合实际开发经验和同学们最迫切关注的技术热点 总结了100个常用的代码实现 具体如下 1 输出 Hello World print Hello World
  • 客户端负载均衡及透明应用切换(TAF)tnsnames failover=on

    客户端负载均衡及透明应用切换 TAF 这是客户端的一种功能 要在客户端的tnsnames ora中设置本地服务命名相应的参数 LOAD BALANCE ON和FAILOVER ON FAILOVER MODE参数 来启用客户端负载均衡和TA
  • springboot-mvc+扩展SpringMVC+@EnableWebMvc+修改自动化配置

    1 Spring MVC auto configuration https docs spring io spring boot docs 1 5 9 RELEASE reference htmlsingle boot features s
  • 定时器0工作方式1

    include
  • 在GPU上运行pytorch程序(指定单/多显卡)

    目录 1 使用CUDA VISIBLE DEVICES 2 使用cuda 和torch cuda set device 3 使用device 4 使用torch nn DataParallel 1 使用CUDA VISIBLE DEVICE
  • error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token

    头文件函数声明少了 分号 转载于 https www cnblogs com xuyh p 3794479 html
  • 分治算法例题

    分治算法例题 leetcode 23 给你一个链表数组 每个链表都已经按升序排列 请你将所有链表合并到一个升序链表中 返回合并后的链表 示例 1 输入 lists 1 4 5 1 3 4 2 6 输出 1 1 2 3 4 4 5 6 解释
  • WPF混合开发之WebView2(一) 简介及环境搭建

    目录 引言 WebView2系统要求 WebView2下载安装 结语 引言 在WPF开发中 经常会有混合开发的需求 即在WPF中加载网页 目前最常用也是最流行的方式是CefSharp 它的功能非常强大 可以提供较为完善的开发和使用体验 但是
  • 输出过压保护电路的设计思路

    输出过压保护电路的设计思路 开关电源在使用过程中会发生输出电压过高或者过低的现象 开关电源存在一个额定电压 如果超出额定电压就可能超出输出电容的耐压值 电源会因此发热击穿而烧毁甚至起火 因此设计出不同类型的保护电路 当控制电路失效或其他故障
  • nginx基础1——工作原理、安装配置、命令参数

    文章目录 一 基本了解 1 1 特性优点 1 2 功能应用 1 3 工作模块分类 1 4 模块配置方法 二 工作原理 三 安装与配置 四 常用命令 一 基本了解 nginx简介 nginx是一款轻量级的Web服务器 反向代理服务器及电子邮件
  • error:Spring项目启动卡死在parsed mapper file: */*.xml 无报错日志

    1 报错如下 Parsed mapper file file D 2401 JavaWorkSpace rmt dec service target classes mapper RirdMapper xml 2 解决办法 1 检查项目本身
  • LeetCode 477. Total Hamming Distance

    题目链接 点击这里 题意 两个整数的 汉明距离 指的是这两个数字的二进制数对应位不同的数量 计算一个数组中 任意两个数之间汉明距离的总和 class Solution public int totalHammingDistance vect
  • Nginx 性能优化有这篇就够了!

    目录 1 Nginx运行工作进程数量 Nginx运行工作进程个数一般设置CPU的核心或者核心数x2 如果不了解cpu的核数 可以top命令之后按1看出来 也可以查看 proc cpuinfo文件 grep processor proc cp
  • 饼图、柱形图、堆积柱、折线图、散点图,到底应该怎么选?

    随着数字经济的发展 各行业的数据都出现了爆炸式的增长 如何快速从海量数据中提取出有效信息 最大化地挖掘数据价值 是所有转型的企业都在面临的问题 想要快速直观地以易于理解 内容简单的方式了解相关数据 就需要数据可视化来帮忙 数据可视化作为当今
  • 微前端总结

    微前端 核心价值 微前端架构具备以下几个核心价值 技术栈无关 主框架不限制接入应用的技术栈 微应用具备完全自主权 独立开发 独立部署 微应用仓库独立 前后端可独立开发 部署完成后主框架自动完成同步更新 增量升级 在面对各种复杂场景时 我们通
  • 限流-漏桶算法、令牌桶算法

    1 问题 系统的某个接口访问量突然激增 没多久接口崩溃 形成连锁反应 导致整个系统崩溃 如何应对这种情况呢 为我们的接口加上 保险丝 预防这种突发情况 接口压力过大 造成整个系统瘫痪 当接口流量过大时 我们可以通过拒绝访问或等待等机制 即限
  • 【Python 基础篇】Python中的 __name__ == ‘__main__’ 详解

    学习过C语言或者Java语言的盆友应该都知道程序运行必然有主程序入口main函数 而python却不同 即便没有主程序入口 程序一样可以自上而下对代码块依次运行 然后python不少开源项目或者模块中依然存在 name main 这种写法