if __name__ == __main__:什么意思_秒懂Python编程中的if __name__ == 'main' 的作用和原理...

来源:菜鸟分析 链接:

https://zhuanlan.zhihu.com/p/34112508

一天偶然发现知乎上有篇关于对python编程中的if __name__ == 'main'的理解陈述,看完之后,自己觉得不够简单明了,于是在其文章底部写了一句话,突然收获各位乎友满满的赞同:

一句话,秒懂

__name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。

相信初学者在学习Python的过程中,不可避免的总会遇到if __name__ == 'main'语句,虽然一直知道它的作用,但是可能一直比较模糊,今天菜鸟分析就与大家一起举例说说我的理解。

举个例子,我们在下面在test.py中写入如下代码:

print('恋习Python')
def main:
print('恋习Python')
if __name__ == '__main__':
main
print('跟着菜鸟分析,练习Python越练越恋')

运行代码,则输出结果为:

bde7bfb8523dc7e453ae2eee7ed13741.png

然后,在同一文件夹新建名称为import_test.py的脚本,只输入代码:

import test

运行代码,则输出结果为:

07eecf323b79a23fd54aebd73caa89b9.png

与之前test.py代码运行结果比较,只有输出恋习Python,也就是if __name__=="__main__": 之前的语句被执行,之后的没有被执行。

这是为什么呢?别急,菜鸟分析继续给你举例子说明,绝对让你满意为止,最后有一种豁然开朗的感觉。

现在,我们在test.py脚本的if __name__=="__main__":之前加入print __name__,即将__name__打印出来,则最后运行结果如下:

1d4debaad0a21615ff34b96366459b01.png

可以看出,此时变量__name__的值为"__main__"。

再执行import_test.py,模块内容和执行结果如下:

f1a069748b61e3a4a66ed84423b6485d.png

此时,import_test.py中的__name__变量值为test,不满足__name__=="__main__"的条件,因此,无法执行其后的代码。

哈哈,是不是一下明白啦,觉得不错,给菜鸟分析点个赞哦!

再仔细想想,其运行原理也就是:

由于每个Python模块(Python文件)都包含内置的变量__name__,当运行模块被执行的时候,__name__等于文件名(包含了后缀.py)。如果import到其他模块中,则__name__等于模块名称(不包含后缀.py)。而“__main__”等于当前执行文件的名称(包含了后缀.py)。所以当模块被直接执行时,__name__ == '__main__'结果为真;而当模块被import到其他模块中时,__name__ == '__main__'结果为假,就是不调用对应的方法。

简而言之就是:__name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。当模块被直接运行时,代码将被运行,当模块是被导入时,代码不被运行。

一句话,秒懂!

(完)

Python学习交流群

为了让大家更加即时地沟通学习,我们建了一个Python学习交流群,有想入群的同学,可以添加下面小助手微信,他会拉大家入群哈~

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

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

相关文章

4.openstack之mitaka搭建glance镜像服务

部署镜像服务 一:安装和配置服务 1.建库建用户 mysql -u root -p CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance.* TO glancelocalhost IDENTIFIED BY 密码; GRANT ALL PRIVILEGES ON glance.* TO glance% IDENTIFIED BY 密码; flush privileges; 2.keys…

mysql php 变量赋值,在MySQL UPDATE(PHP / MySQL)中使用变量

I am using this code so I can update a record in database:$query mysql_query("UPDATE articleSET com_count ". $comments_countWHERE article_id .$art_id ");My question is: How can I use variables in a MySQL UPDATE statement.解决方案$query m…

mongodb 教程一

mongodb是nosql(not only sql)的一种方式 。是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL - 代表着不仅仅是SQL- 没有声明性查询语言- 没有预定义的模式-键 - 值对存储,列存储,文档存储,图形数据库- 最…

java mysql 回滚_Java 中对数据库操作时的 回滚

Connection connnull;conn.rollback()就可以回滚//用jdbc连接数据库//举例子,比如你在写一个级联删除的方法的时候,为了保证数据完整性,删除的时候一定要确定该删的都删了才行,否则就要回滚,下面是删除方法的例子&…

向文件中追加内容

#echo abcbedf>>a.txt 将abcdef追加到a.txt文件末尾 往文件中写入内容,比如原来的a.txt文件内容是aaaaa, #echo bbbbb>a.txt,这个是bbbbb把a.txt原来的内容替换 这里注意 >是覆盖,>>是追加。 如果为多行输入,需…

kali linux改中文_【亲测实验】kali linux 2020 设置为中文方法

kali 2020.1可用进入我们的正题,修改为中文的步骤1.更换更新源打开终端,输入下边命令打开更新源的文件vim /etc/apt/sources.list在文件结尾加入下边更新源#中科大deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contribdeb-src http:…

php取整函数ceil,floor,round,intval函数的区别

1、ceil — 进一法取整说明float ceil ( float $value )返回不小于 value 的下一个整数&#xff0c;value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float&#xff0c;因为 float 值的范围通常比 integer 要大。ceil() 例子 <?php echo ceil(4.3); // 5 echo ceil…

mysql的源码目录_Mysql DBA系统学习(2)了解mysql的源码目录及源文件

了解mysql的源码目录包括客户端代码&#xff0c;服务端代码&#xff0c;测试工具和其他库文件Bdb 伯克利DB表引擎BUILD 构建工程的脚本Client 客户端Cmd-line-utils 命令行工具Config 构建工程所需的一些文件Dbug Fred Fish的调试库Docs 文档文件夹Extra 一些相对独立的次要的工…

开始我的blog之旅

这是我第一次开始写blog的时刻&#xff0c;我也想好了怎么开始&#xff0c;鉴于我喜欢刨根问底的原则&#xff0c;我决定要翻开C语言&#xff0c;重新复习。同时以写blog的形式来印证。 写作路线嘛&#xff0c;就按照《C Primer Plus》第五版的章节套路来&#xff0c;中间在参杂…

ubuntu 破解mysql密码_Ubuntu下忘记MySQL root密码解决方法

Linux下忘记MySQL root密码解决方法忘了mysql密码&#xff0c;从网上找到的解决方案记录在这里。编辑mysql的配置文件/etc/mysql/my.cnf&#xff0c;在[mysqld]段下加入一行“skip-grant-tables”121201191255521.png重启mysql服务ubuntu:~$ sudo service mysql restartmysql s…

面向对象编程其实很简单——Python 面向对象(初级篇)

在Python教学中发现&#xff0c;很多同学在走到面向对象编程这块就开始蒙圈了&#xff0c;为了帮助大家更好的理解面向对象编程并其能将其用到自己的开发过程中&#xff0c;特写此文。 概述 面向过程&#xff1a;根据业务逻辑从上到下写垒代码 函数式&#xff1a;将某功能代码…

nginx mysql双机热备_MYSQL双机热备

mysql从3.23.15版本以后提供数据库复制功能。利用该功能可以实现两个数据库同步&#xff0c;主从模式&#xff0c;互相备份模式的功能&#xff0c;该功能可将一个数据库的工作量分摊于多个Mysql服务器之上&#xff0c;但考虑到种种因素&#xff0c;不要使用过多的同步服务器。最…

Code 0001: Wait rx completed

注意&#xff1a;以下Demo适用于不带DMA功能的串口。 Demo0001 /* 方法&#xff1a; wait_rx函数每1ms扫描串口是否有接受数据&#xff0c;如果长时间没有收到数据&#xff0c;则接受完成。 * 分析&#xff1a; 该方法存在的问题是扫描时间需要配合串口波特率进行设置&#xff…

windwos cakephp mysql apache_配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境

1. 安装配置apahce安装配置apache是比较简单的&#xff0c; 跟着安装向导一步步往下走就能搞定。最多就是在配置端口的地方需要注意一下&#xff0c;如果已经安装了其它web服务器占用了80端口&#xff0c;那记得配置的时候选一个别的端口。向导中忘了设置&#xff0c;在apache的…

python 单链表是否有回路_第5章 第1节 链表

● 请你说出几种基本的数据结构&#xff0c;参考回答&#xff1a;常见的基本的数据结构有链表、栈、队列、树(只列出面试常考的基本数据结构)1、链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系…

linux下如何使用sftp命令【转】

linux下如何使用sftp命令 from&#xff1a; http://www.cnblogs.com/chen1987lei/archive/2010/11/26/1888391.htmlsftp 是一个交互式文件传输程式。它类似于 ftp, 但它进行加密传输&#xff0c;比FTP有更高的安全性。下边就简单介绍一下如何远程连接主机&#xff0c;进行文件…

netbean下搭建mariadb数据库

本人的操作系统Manjaro 最新版&#xff0c;mariadb版本为10.1.1&#xff0c;使用netbeasn开发java WEB&#xff0c;搭建过程如下&#xff1a; 1、安装数据库 pacman -S mariadb 2、启动数据库服务&#xff1a; systemctl start mariadb(启动) systemctl stop mariadb(关闭) 3、…

syslog打印不带等级_syslog之一:Linux syslog日志系统详解

目录&#xff1a;一、syslog简介syslog是一种工业标准的协议&#xff0c;可用来记录设备的日志。在UNIX系统&#xff0c;路由器、交换机等网络设备中&#xff0c;系统日志(System Log)记录系统中任何时间发生的大小事件。管理者可以通过查看系统记录&#xff0c;随时掌握系统状…

推进五通一平:手淘技术三大容器 五大方案首次整体亮相 百川开放升级

在云栖大会上&#xff0c;马云提出五个“新”&#xff0c;新零售、新制造、新金融、新技术和新能源&#xff0c;称将对各行各业造成巨大的影响&#xff0c;成为决定未来成败的关键。而五个新的实现&#xff0c;也必须是各行各业共同推进&#xff0c;整个生态共同受益的结果。继…

linux mysql管理软件_8款适合Linux用户使用的数据库管理工具!

从内容管理系统到简单的表格&#xff0c;数据库是每一个开发项目的一部分。这就是为什么开发者们如此强调使用正确类型的数据库工具。下面这些可能对您有所帮助&#xff01;Autotabla是一个你的程序的SQL数据表的CGI管理界面。只需要提供你数据库架构的XML描述&#xff0c;你就…