Python if __name__ == “__main__“ 用法

news2024/9/28 15:20:06

文章目录

  • 1 前言
  • 2 原理
  • 3 `__name__`变量的作用
  • 参考

1 前言

在很多Python程序中,我们都会遇到if __name__ == "__main__"的情况,却不知道为何要这样做

在很多编程语言中,如C、Java等,都需要程序的入口,一般都是main函数,程序会从main函数开始执行。而Python是脚本语言,是动态解释执行的,即从脚本的第一行开始,执行到最后,没有统一的入口。

Python的源码文件除了直接可以被运行以外,还可以作为模块被导入,当模块被导入的时候,其中的源码会被执行(这部分代码被当作顶层代码,这里不做深入讨论,可以认为顶层代码即没有缩进的代码)

例子:

在相同路径创建import_file.py

def call_func():
    print("call_func is called!")
    pass

call_func()

创建run_file.py

import import_file

print("Hello run_file!")

输出:

call_func is called!
Hello run_file!

当我们导入某些包的时候,并不希望文件的某些顶层代码被执行,有些是需要被执行的比如import ...,此时就需要使用if __name__ == "__main__"

修改import_file.py文件

def call_func():
    print("call_func is called!")
    pass

if __name__ == "__main__":
	call_func()

此时输出的结果为:

Hello run_file!

2 原理

首先我们需要直到__name__变量是什么?

  • py文件被当作模块导入的时候,此时__name__为模块的名字。所谓模块的名字,导入的是一个文件,则模块名为文件名(无后缀),比如pandas,那么__name__的值为"pandas";如果导入的是一个类名或者变量名,则模块名为类名或者函数明,比如:from matplotlib import pyplot as plt__name__的值为pyplot,尽管使用as

  • 在文件被Python解释器执行的时候,此时__name__的值为"__main__"

  • 因此为了避免部分顶层代码的执行,使用if判断模块,来控制其执行

例子:

我们将上面的例子的输出改为print(__name__),首先我们执行import_file.py(没有使用if __name__ == "__main__":),程序的输出结果为:

def call_func():
    print(__name__)
    pass


# if __name__ == "__main__":
call_func()    

>>>
__main__

我们再执行run_file.py,可以看到输出为:

import import_file

print(__name__)

>>>
import_file
__main__

以上证明了我们的论述

3 __name__变量的作用

反应一个包的结构

在这里插入图片描述

其中所有文件的内容均为: print(__name__)

执行

import my_module.b.c

输出:

my_module
my_module.b
my_module.b.c

结果:

可见导入时,都执行了__init__.py,并产生了缓存,展示了包所在的层次结构

在这里插入图片描述


参考

如何简单地理解Python中的 if name == ‘main’: https://blog.csdn.net/yjk13703623757/article/details/77918633

Python 中的 if name == ‘main’ 该如何理解:https://blog.konghy.cn/2017/04/24/python-entry-program/

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

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

相关文章

MySql锁机制(全网最全、最详细、最清晰)

1、MySql锁机制 锁机制的作用: 解决因为资源共享,而造成的并发问题。 没有锁机制时: 例如一号用户和二号用户都要去买同一件商品(假如这件商品是一件衣服),一号用户手速稍微快了一些,于是就…

从事软件测试需要学自动化么

相信许多对软件测试有过一点了解的人,对自动化都不会感到陌生。我们常常会听到一定软件测试人员一定要学自动化的说法,那么很多人都会有这样的疑问,从事软件测试为什么要学自动化?事实上,如今只会功能测试的从业者往往…

光波导成为AR眼镜迭代新趋势,二维扩瞳几何光波导潜力彰显

关注AR眼镜的朋友可能都会发现,近期新品迭代的一个趋势是持续在小型化、轻量化方向演进。与一年前光学方案主要以BirdBath不同的是,消费级AR眼镜正快速向光波导方案探索和转变。这一点在最近发布的众多新品AR眼镜中就能明显的感受到,以视享G5…

堆排序 TopK 优先级队列的部分源码 JAVA对象的比较

一.堆排序:我们该如何借助堆来对数组的内容来进行排序呢? 假设我们现在有一个数组,要求从小到大进行排序,我们是需要进行建立一个大堆还是建立一个小堆呢? 1)我的第一步的思路就是建立一个小堆,因为每一次堆顶上面的元…

MGRE和ospf的综合运用

目录实验需求知识点实验过程一,在R1 R2 R3中的MGRE搭建二,在R1 R4 R5中的MGRE搭建三,整个内网的ospf协议实验需求 一 题目要求 1,R6为ISP代表运营商,只能配置ip地址,R1-R5环回 代表私有网段 2&#xff0c…

【Linux】顶级编辑器Vim的基本使用及配置

👑作者主页:进击的安度因 🏠学习社区:进击的安度因(个人社区) 📖专栏链接:Linux 文章目录一、前言二、vim基本概念三、vim 基本操作1、模式切换2、命令模式3、插入模式4、底行模式四…

[Vue的数据绑定]一.Vue的数据绑定;二.Vue的事件绑定;三.Class和Style的绑定;四.Vue的过滤器;五.Vue脚手架的使用

目录 一.Vue的数据绑定 1.单向数据绑定:将Model绑定到View上,当通过JavaScript代码改变了Model时,View就会自动刷新。不需要进行额外的DOM操作就可以实现视图和模型的联动 (1)插值表达式:{{ 表达式 }}&am…

pandas 使用

import pandas as pd a [3,7,2] myvar pd.Series(a,index["x","y","z"]) print(myvar["x"]) #结果是3 #给序列赋值index ,然后可以根据index找到对应的数 data {"col1": range(-5,0), "col2": r…

半入耳式耳机适合跑步吗、最适合跑步的五款耳机分享

好的跑步耳机可以帮助您跑得更努力、更快和更久。研究发现,听音乐可以提高跑步成绩,尤其是在速度方面。同时,随着音乐锻炼可以提高跑步者的速度并减少精神疲劳,帮助您自信地打破这些束缚。那么目前市面上有哪些无线耳机是适合跑步…

【算法】分治算法(第三章习题解答)

3 分治算法 3.1 设 AAA 是 nnn 个非 000 实数构成的数组, 设计一个算法重新排列数组中的数, 使得负数都排在正数前面. 要求算法使用 O(n)O(n)O(n) 的时间和 O(1)O(1)O(1) 的空间. 算法设计:由于算法要求使用 O(n)O(n)O(n) 的时间和 O(1)O(1)O(1) 的空间&#xff0…

力扣sql入门篇(八)

力扣sql入门篇(八) 1 订单最多的客户 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT customer_number FROM Orders GROUP BY customer_number having count(order_number)(SELECT max(o1.number)FROM (SELECT count(order_number) numberFRO…

电压放大器在超声导波声弹特性的液压管路压力检测中的应用

实验名称:电压放大器在超声导波声弹特性的液压管路压力检测中的应用 研究方向:超声检测 实验目的: 为实现农机装备液压系统的非介入式压力检测,在分析适合压力检测的超声导波声弹敏感模态与激励频率的基础上,搭建了一套…

用埃式筛法来求解素数。————C++

目录埃式筛法埃式筛法求解某一个数字包含的所有素数数组Code运行结果埃式筛法判断某一个数字是否为素数Code运行结果埃式筛法 首先要了解什么式埃式筛法之前,需要知道一个定理。 就是素数的整数倍一定不是素数。 了解了这个就基本大概懂了埃式筛法。 首先初始化…

C语言线性表实现:顺序表

文章目录:概念理解:1. 动态顺序表结构体:2. 顺序表动态初始化:3. 顺序表扩容:4. 插入:5. 删除:6. 按位序查找:7. 按值查找:8. 输出顺序表:9. 判断顺序表是否相…

UniSCA漏洞优先级排序

当谈到开源漏洞时,我们会发现它们似乎永远处于增长状态。事实上,UniSCA的开源风险报告显示,与2021年同期相比,2022年前9个月添加到UniSCA漏洞数据库中的开源软件漏洞数量增长了33% 。然而,虽然有些漏洞会带来严重的业务…

Altium Designer 20 凡亿教育视频学习-04

第四部分学习 unknow pin错误原因 将原理图导入到PCB时会出现问题 管脚未使用报错 导入PCB器件全部绿 删掉下面的紫红色框架即可(Sheet2) 视频讲的方法是:一开始把所有的规则删掉,只保留电气规则 板子大小评估-把器件聚集在一…

16---实现权限菜单管理(一)

1、实现角色管理 建role表 USE management; DROP TABLE IF EXISTS role;CREATE TABLE role (id int(11) NOT NULL AUTO_INCREMENT COMMENT id,name varchar(50) DEFAULT NULL COMMENT 名称,description varchar(255) DEFAULT NULL COMMENT 描述,PRIMARY KEY (id) ) ENGINEInn…

活动星投票最美空姐网络评选微信的投票方式线上免费投票

如何进行“最美空姐”的投票活动_投票小程序投票_投票助力方式大家在选择投票小程序之前,可以先梳理一下自己的投票评选活动是哪种类型,目前有匿名投票、图文投票、视频投票、赛事征集投票等。我们现在要以“最美空姐”为主题进行一次投票活动&#xff0…

Docker 三剑客

Docker 三剑客包括Docker Machine、Docker Compose、Docker Swarm。 1. Docker Machine 1.1 简介 Docker Machine 是 Docker 官方三剑客项目之一,使用它可以在多个平台上快速安装部署Docker环境,还可以在短时间内快速构建起一套Docker主机集群。 Do…

最近手头有点紧,于是用Python来冲一波股票...

文章目录前言准备工作获取数据部分爬虫的基本流程代码展示数据可视化分析最后前言 快过年了,手头有点紧,但是作为一个男人,身上怎么能够没有大把钞票呢? 于是我决定用Python来分析一波股票,赢了会所嫩*,输…