很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main__' 的作用,到底干嘛的?

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

“Make a script both importable and executable”

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

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

先写一个模块:

这个函数定义了一个main函数,我们执行一下该py文件发现结果是打印出”we are in __main__“,说明我们的if语句中的内容被执行了,调用了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__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!

python中main的作用_浅析python 中__name__ = '__main__' 的作用相关推荐

  1. python中括号的作用_浅析python 中大括号中括号小括号的区分

    python语言最常见的括号有三种,分别是:小括号( ).中括号[ ]和大括号也叫做花括号{ }.其作用也各不相同,分别用来代表不同的python基本内置数据类型. 1.python中的小括号( ): ...

  2. python 定时执行 爬虫 模块_浅析python实现scrapy定时执行爬虫

    项目需要程序能够放在超算中心定时运行,于是针对scrapy写了一个定时爬虫的程序main.py ,直接放在scrapy的存储代码的目录中就能设定时间定时多次执行. 最简单的方法:直接使用Timer类 ...

  3. python字典嵌套字典构造_浅析python 字典嵌套

    为什么需要嵌套? 有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套 .你可以在列表中嵌套字典.在字典中嵌套列表甚至在字典中嵌套字典. 字典列表 例如:字典alien_0包含 ...

  4. anaconda中的python如何进行关联分析_浅析python,PyCharm,Anaconda三者之间的关系

    一.它们是什么? Python是一种跨平台的计算机程序设计语言,简单来说,python就是类似于C,Java,C++等,一种编程语言. 2.Anaconda Anaconda指的是一个开源的Pytho ...

  5. python 多条件 选择 算法_浅析Python中的多条件排序实现

    多条件排序及itemgetter的应用曾经客户端的同事用as写一大堆代码来排序,在得知Python排序往往只需要一行,惊讶无比,遂对python产生浓厚的兴趣. 之前在做足球的积分榜的时候需要用到多条 ...

  6. python中tracer函数意思_浅析Python编写函数装饰器

    本节主要介绍编写函数装饰器的相关内容. 跟踪调用 如下代码定义并应用一个函数装饰器,来统计对装饰的函数的调用次数,并且针对每一次调用打印跟踪信息. 这是一个通过类装饰的语法写成的装饰器,测试如下: 运 ...

  7. python闭包两种写法_浅析Python闭包

    一.什么是闭包python 在介绍闭包概念前,咱们先来看一段简短的代码数组 def sum_calc(*args):defwrapper(): sum=0for n inargs: sum+=n;re ...

  8. python派落塔问题_浅析python递归函数和河内塔问题

    关于递归函数: 函数内部调用自身的函数. 以n阶乘为例: f(n) = n ! = 1 x 2 x 3 x 4 x...x(n-1)x(n) = n x (n-1) ! def factorial(n ...

  9. java 线程组作用_浅析Java中线程组(ThreadGroup类)

    一.概念 Java中使用ThreadGroup类来代表线程组,表示一组线程的集合,可以对一批线程和线程组进行管理.可以把线程归属到某一个线程组中,线程组中可以有线程对象,也可以有线程组,组中还可以有线 ...

最新文章

  1. 【FFmpeg】自定义回调函数处理AVIOContext中的数据
  2. RedHat8 配置本地yum源
  3. Asp.net中的AJAX学习记录之一 AJAX技术的崛起与Asp.net AJAX的诞生
  4. Linux下动态共享库加载时的搜索路径详解
  5. hive sql 怎么实现循环_python怎么实现循环
  6. SqlServer的NEWID()函数巧用,生成GUID作为唯一标识用
  7. 单元格变色和图片透明
  8. quinlan的C4.5编译
  9. C#基础-应用程序域
  10. micropython移植教程_【教程】智能编程T-Watch手表初试micropython之电子秤教程
  11. text-indent的用法
  12. ajax连接前后端原理,前后端数据交互方法和原理
  13. 01-windows下git远程拉取项目
  14. 模拟grid点击事件
  15. OpenSSL 修复可导致 DoS攻击的高危漏洞
  16. 从零开始学习MXnet(四)计算图和粗细粒度以及自动求导
  17. 【OR】YALMIP 几何规划
  18. 万年历单片机c语言程序,51单片机c语言电子万年历完整程序.pdf
  19. 神舟IV号开发板STM32F107VCT6资料包(已购买)\STM32神舟IV号视频教程\第9集 串口实验 电脑超级终端连接串口1
  20. 神州三号开发板stm32 f103ze jlink连接失败拜求高手指点

热门文章

  1. golang fmt格式“占位符”
  2. 在64位windows下使用instsrv.exe和srvany.exe创建windows服务
  3. .NET获取不到js写的cookie解决方法
  4. web计算机导论读书报告,计算机导论 读书报告.doc
  5. opcache开启和关闭
  6. PHP用redis实现多进程队列
  7. 程序员怎样才能写出一篇好的技术文章
  8. JS的编码:escape,encodeURI,encodeURIComponent,解码:unescape,decodeURI,decodeURIComp
  9. H5弹窗,弹出toast(横竖屏通用)
  10. python3.6 websocket异步高并发_Python3.6 websocket开发