当前位置: 首页 > news >正文

浅析python 中__name__ = '__main__' 的作用

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

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

“Make a script both importable and executable”

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

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

先写一个模块:

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

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

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

?
1
2
3
#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__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!

您可能感兴趣的文章:

  • python模拟登录百度代码分享(获取百度贴吧等级)
  • python模拟登录百度贴吧(百度贴吧登录)实例
  • Python(Tornado)模拟登录小米抢手机
  • python抓取某汽车网数据解析html存入excel示例
  • PHP的cURL库功能简介 抓取网页、POST数据及其他
  • c# 抓取Web网页数据分析
  • python之import机制详解
  • 采用python实现简单QQ单用户机器人的方法
  • python实现定制交互式命令行的方法
  • python采用requests库模拟登录和抓取数据的简单示例

转载于:https://www.cnblogs.com/qqhfeng/p/5241862.html

相关文章:

  • MySQL常见错误
  • EL表达式里面fn的用法
  • 时间Date的各种获取方式
  • docker学习笔记1:docke环境的查看
  • Guava缓存值CacheBuilder介绍
  • android 文件存储SharedPreferences
  • Java中Cloneable 和 clone()的总结和使用
  • Java并发编程之ConcurrentHashMap原理分析
  • Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of
  • 创建表--自动编号字段且自增
  • No plugin found for prefix 'jetty' in the current project and in the plugin groups [org.apache.mave
  • 关于static函数在类中的定义和使用
  • IDEA下使用Jetty进行Debug模式调试
  • SQL SERVER普通用户需要什么权限才能执行sp_configure命令
  • Ajax异步方式实现登录与参数的校验
  • [ JavaScript ] 数据结构与算法 —— 链表
  • Apache的基本使用
  • Docker入门(二) - Dockerfile
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • 包装类对象
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 我是如何设计 Upload 上传组件的
  • 学习笔记:对象,原型和继承(1)
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 积累各种好的链接
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #git 撤消对文件的更改
  • (2020)Java后端开发----(面试题和笔试题)
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (篇九)MySQL常用内置函数
  • (转)C#调用WebService 基础
  • .aanva
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net快速开发框架源码分享
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .NET中 MVC 工厂模式浅析
  • .ui文件相关
  • @Resource和@Autowired的区别
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [20171101]rman to destination.txt
  • [BUAA软工]第一次博客作业---阅读《构建之法》
  • [C#]获取指定文件夹下的所有文件名(递归)
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [DAX] MAX函数 | MAXX函数
  • [Dxperience.8.*]报表预览控件PrintControl设置
  • [ITIL学习笔记]之事件管理(2)
  • [Java] IDEA Scala环境搭建