python:浅析python 中__name__ = '__main__' 的作用(转载)

转自:http://www.cnblogs.com/alan-babyblog/p/5147770.html#undefined

有句话经典的概括了这段代码的意义:

“Make a script both importable and executable”

意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行

这句话,可能一开始听的还不是很懂。下面举例说明:

先写一个模块:

1 #module.py
2 def main():
3   print "we are in %s"%__name__
4 if __name__ == '__main__':
5   main()

这个函数定义了一个main函数,我们执行一下该py文件发现结果是打印出”we are in __main__“,说明我们的if语句中的内容被执行了,调用了main():

但是如果我们从另我一个模块导入该模块,并调用一次main()函数会是怎样的结果呢?

#anothermodle.py
from module import main
main()

其执行的结果是:we are in module

但是没有显示”we are in __main__“,也就是说模块__name__ = '__main__' 下面的函数没有执行。

这样既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次。这才是关键。

总结一下:

如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == '__main__'“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。

这个功能还有一个用处:调试代码的时候,在”if __name__ == '__main__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!

转载于:https://www.cnblogs.com/hwf-73/p/7020078.html

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

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

相关文章

1251: [蓝桥杯2015初赛]星系炸弹

时间限制: 1 Sec 内存限制: 256 MB 题目链接:http://oj.ecustacm.cn/problem.php?id1251 题目描述 在X星系的广袤空间中漂浮着许多X星人造“炸弹”,用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如:阿尔法炸弹2015年1月1日…

每天五个java相关面试题(3)

1. Servlet的生命周期是什么?答: 第一次请求: 构造方法->init() -> service() -> doGet()/doPost() 以后的请求:service() -> doGet()/doPost(); Servlet是单实例的. 2. 说出ArrayList,Vector, LinkedList的存储性能和特性HashMap和Has…

c++中四舍五入取整、向上取整和向下取整问题

方法一&#xff1a;利用c函数 四舍五入&#xff1a;round()函数 向上取整&#xff1a;ceil()函数 向下取整&#xff1a;floor()函数 #include <iostream> #include <cmath>//函数头文件 using namespace std; int main() {double a1.2;double b3.7;cout<<&q…

SQL PROMPT5.3.4.1的一些设置选项

摘自&#xff1a;http://www.cnblogs.com/furenjian/p/4519426.html sql prompt这个工具安装好之后就可以在SSMS里使用代码提示功能 园子里非常多的文章&#xff1a;例如SQLSERVER开发利器XXXXXX http://www.cnblogs.com/VAllen/archive/2012/09/08/SQLPrompt.html http://www.…

csp真题202112-1 序列查询 (100分)

#include <iostream> using namespace std; int A[1000000]{0};//c中一定一定要要记得给变量赋初始值&#xff0c;会减少很多不必要的麻烦 //尽可能将数组量大的数组定义在函数外面&#xff0c;不要在函数内部定义大数组 int main() {int n0,N0,sum0,i0;cin>>n&g…

云麦小米华为体脂秤怎么样_测评华为智能体脂秤,比小米智能体重秤贵30元到底差别在哪里?...

“流浪的好奇”每天更新最新科技资讯和产品测评内容&#xff0c;欢迎您关注订阅&#xff01;我们之前说过华为可不仅仅只有5G通讯技术和智能手机&#xff0c;华为杂货铺里的产品虽然不如小米杂货铺那么的丰富&#xff0c;但是也不是空铺一个&#xff0c;还是有一些华为主业之外…

c++中引用和指针的区别

指针是指向一块内存&#xff0c;它的内容是所指内存的地址&#xff1b; 而引用则是指向某块内存变量的一个别名&#xff0c;相当于变量的另一个名字。 例如&#xff1a; #include <stdio.h> int main() {int a2;int &ba;printf("a:%d\n",a);printf("…

什么是大数据,怎么理解和应对大数据时代

什么是大数据&#xff0c;怎么理解和应对大数据时代 在大数据与深度学习中蝶化的人工智能。当代人工智能离不开大数据和深度学习算法。我们先来了解什么是大数据&#xff0c;大数据的本质是什么&#xff0c;在大数据时代我们应该如何应对&#xff1f; 当我们谈论数据的时候我们…

android 手机获取公网ip_KSWEB 旧手机搭建网站服务

? 感谢你阅读「 Android 应用 」的第 113篇分享文章KSWEB 是一款由俄罗斯开发者开发的一款可以在 Android 手机上安装建站相关服务的应用&#xff0c;支持 Lighttpd、Nginx、Apache、MySQL、FTP、PHP 等。打开应用后点击不再提醒忽略弹窗&#xff0c;给予权限后等待片刻按照提…

盘锦工业机器人厂家_盘锦制造进入“机器人时代”

原标题&#xff1a;盘锦制造进入“机器人时代”——盘锦高新区企业技术创新见闻“忽如一夜春风来&#xff0c;千树万树梨花开。”最近&#xff0c;记者走访了盘锦高新区部分装备制造企业&#xff0c;那一个又一个“机器人”&#xff0c;正在形成盘锦“机器人方队”&#xff0c;…

如何判断windows版本?

windows版本名称太多&#xff0c;怎么通过版本号&#xff0c;取得对应的版本名称&#xff1f; 版本号与市场名称的关系 在微软与IBM分家的时候Windows操作系统改名叫做Windows NT&#xff0c;第一个版本是Windows NT 3.1。 后来由于市场需要&#xff0c;在每次发布Windows之前&…

phpStydy配置memcache扩展

phpStydy配置memcache扩展 先提示一点&#xff1a;我电脑是win7 64 位的&#xff0c;但我用的环境是phpstudy (php5.6nginx); 下面的下载里我下载64位软件安装后没反映&#xff0c;因为phpstudy环境是32位的,下载32位安装后memcache就成功了; 一、下载并安装memcached服务器端软…

hadoop 计算几点 主节点_01-Hadoop的介绍

Hadoop的介绍Hadoop最早起源于Nutch.Nutch的设计目标是构建一个大型的全网搜索引擎&#xff0c;包括网页抓取、索引、查询等功能&#xff0c;但随着抓取网页数量的增加&#xff0c;遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题. 2003年、2004年谷歌发表的两…

使用traits技术表现迭代器类型 iterator_category

1.STL的迭代器类型标识&#xff0c;和容器中的迭代器类型。 2.使用trait技术实现stl的advance功能。 3.迭代器trait中的其他类型定义。 1.STL的迭代器类型标识&#xff0c;和容器中的迭代器类型。 熟悉的迭代器类型&#xff0c;输入、输出、前向、双向、随机。 c标准程序库分别…

外部仓库_仓库主要作业流程和WMS作业优化方案

仓库在人们眼中一直是低效、高成本的地方&#xff0c;即便是增加人手也很难做好仓库管理。那么我们应该采取哪些方式来管理&#xff0c;才能做到降本增效呢&#xff1f;首先我们需要先了解仓库主要作业流程及在作业中存在的痛点。1入库流程a.商品SKU太多&#xff0c;部分形状相…

java IO流(上)

1.字节流 1.1 IO流概述和分类【理解】 1.IO流介绍 IO&#xff1a;输入/输出(Input/Output)流&#xff1a;是一种抽象概念,是对数据传输的总称.也就是说数据在设备间的传输称为流,流的本质是数据传输IO流就是用来处理设备间数据传输问题的.常见的应用: 文件复制; 文件上传; 文…

java类与对象实验报告心得体会_第四周课程总结与实验报告(Java简单类与对象)...

1.写一个名为Rectangle的类表示矩形。其属性包括宽width、高height和颜色color&#xff0c;width和height都是double型的&#xff0c;而color则是String类型的。要求该类具有&#xff1a;(1) 使用构造函数完成各属性的初始赋值(2) 使用get…()和set…()的形式完成属性的访问及修…

《科技之巅2》序——机器智能数据智能:工具之王

原文链接 “凡是过去&#xff0c;皆为序曲。”——莎士比亚 通过不断发明工具&#xff0c;人类科技指数级进化。语言汇聚原始部落&#xff0c;马镫开启了中世纪的欧洲文明&#xff0c;“高产种子”引发人口爆炸&#xff0c;蒸汽机创造工业文明&#xff0c;大规模集成电路激活数…

一、java面向对象基础

1. 类和对象 面向对象和面向过程的思想对比 : ​ 面向过程 &#xff1a; 是一种以过程为中心的编程思想&#xff0c;实现功能的每一步&#xff0c;都是自己实现的 ​ 面向对象 &#xff1a; 是一种以对象为中心的编程思想&#xff0c;通过指挥对象实现具体的功能 1.1 类和对…

quint32转化为qstring_QT中字符串QString类型的转换

把QString转换为 double类型方法1.QString str"123.45";double valstr.toDouble(); //val123.45方法2.很适合科学计数法形式转换bool ok;double d;dQString("1234.56e-02").toDouble(&ok); //oktrue;d;12.3456.把QString转换为float形1.QString str&qu…