《笨方法学Python》的习题50中,脚本ex50.py最后一行代码就是 if __name__ == "__main__":

那么,这句代码到底有什么用呢? 莫急莫急,且容我慢慢道来!

模块是对象,并且所有的模块都有一个内置属性 __name__。 通常它有两种可能的取值,如果

import一个模块,那么模块__name__ 的值通常为导入模块的文件名,不带路径或者文件扩展名。如

果是直接运行模块,在这 种情况下, __name__ 的值将是一个缺省值(默认值)"__main__"。

-----------------------------------------------------------------------------------------------------------

假设下面是我们要测试的模块名,叫" t.py "

 # t.py

 def print():
print "Hello, world!" # 当前脚本的__name__
print __name__

输出: 缺省值/默认值

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWkAAAAmCAIAAACJYP0UAAAAw0lEQVR4nO3XQQrEIAwFUO9/qhxtFgNSRpuRQlsi761Koq1d+NHWAIqKiIh4exVANbIDAAC4Sb9uHB/GAd10etI6jrlj/cA74kQy4Gz6ypvv/h3gIdNzR7LJ8yPGWOx18QFb+ZsdK8eHxaLsgH3k2TENDtkBLGXHdPyFouyAfcgO4IqV7Bj9TE9a028B5eXZ0U7iI+mOb04qAEA1+c0i776l4pphNxX3YcU1AwAAAAAAAAAAAAAAAAAAAAAAAAAAAABfH5hjKZ9OEOeEAAAAAElFTkSuQmCC" alt="" />

当我们在另外一个脚本中导入 t.py模块时

 import t

 class Test(object):

     def play(self):
pass

输出: 模块名(不带后缀)

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWAAAAAnCAIAAAC+KQV7AAAAaUlEQVR4nO3ZIQEAMRADwfpXFWkV8E3BkyuYURC0JGsBAPyXJMn0CuBJAgFUAgGc5WN6EfAMgQBudAGoBAKoBAKoBAKoBAKovBjAjUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBmA9+tU0EwiN/9AAAAAElFTkSuQmCC" alt="" />

看到了没,这就是这句代码神奇的地方,当它自己执行自己时,"__name__"( 当前脚本的__name__)显示的

是默认值 __main__, 当它被别人导入时,__name__显示的就是它的名字!

------------------------------------------------------------------------------------------------------------

所以说 if __name__ == "__main__":的作用就是——大家先看下下面的示例

 # t.py

 # def: (define)定义函数,也就是创建函数
def welcome():
print "Hello, world!" # 如果__name__的值不变,调用函数成功
if __name__ == "__main__":
welcome()
else:
print __name__

输出: 因为自己执行自己时,"__name__"是默认值"__main__", 所以可以执行函数

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVUAAAAlCAIAAAB9O+0MAAABgUlEQVR4nO3bQW6kMBBAUc6S/Wxzfh8ti5FaRAZTNhBh6r1VGoILt/hRK1GWr3/fC5CT/iGv//2XUkop6+P1kYay0nt2Rl072vy2N70bTEz/A072/743hFld0n/kkvc97vpnevH+D5/a4f7v6OHMjj5Hym+HI+qVu+bCXwv2Xyr1UmP9R1YecGZH9anNG4vvaPNOLtwsDFr3v/fUtl9+tB/oxiWHKw/Yqy4yN9jn8I6C68Pt4v2vr7q2//gicZ916i8O5wbjPLMj8fMIkc//7Z8Om5fUpus/PqJ9UP8817v737tn/cOydPbfXmq4/95BEZH+2y+DI/bmbr6EZ7nk9//3nd28mYjDDhtzD8f17qhebWBHcL1L/v7f20Pj8s2bHKulvo3g3MNx8R3traZ/HmGW//9RC1xviv7FD7eYon/gFvqHvPQPeekf8tI/5KV/yEv/kJf+IS/9Q176h7z0D3npH/LSP+Slf8hL/5CX/iEv/UNe+oe89A956R/y0j+k9QPGtDu2j3Ob2AAAAABJRU5ErkJggg==" alt="" />

在另一个脚本导入t.py

 import t

 class Test(object):

     def play(self):
pass print t.__name__

输出两个t,一个是从t.py传递过来的,因为t.py被导入的缘故,所以它的__name__到了这里已经

变成它自己的文件名了,这和我们给它打印出来的t.__name__的值是相同的,所以有两个 t  ! ! !

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdAAAAA2CAIAAAD4VV98AAAApUlEQVR4nO3dORHAAAwEsfBHddACIP3mkxC42soeHwcAsW3b7p4C4AcEFyAiuACFXdw9EcBHCS5AR2cBIoILEBFcgIjgAkQEFyBiSwGgI7gAAAAAAAAAAAAAAMAzuXcAiAguQERwAQpe7ABEBBego7MAEcEFiAguQERwASKCCxCxpQDQEVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF7tBPFBpoFNAN8iAAAAAElFTkSuQmCC" alt="" />

参考园友:  http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792463.html

【转载】__name__ == "__main__": 你认识我么?的更多相关文章

  1. 转载:Python中的if __name__ == '__main__'

    刚开始学习Python时,对于有些书出现的函数带有“if __name__ == '__main__'”总是迷惑不解,比如<dive into Python>中开头的哪个根据输入的数字计算 ...

  2. 【转载】如何简单地理解Python中的if __name__ == '__main__'

    原帖:https://blog.csdn.net/yjk13703623757/article/details/77918633 通俗的理解__name__ == '__main__':假如你叫小明. ...

  3. python中if __name__ == '__main__': 的解析(转载)

    当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一个 ...

  4. 小白的Python之路 if __name__ == '__main__' 解析

    if __name__ == '__main__' 参考文献: http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792463.html http ...

  5. Python 中if __name__ == '__main__': 的作用和原理

    转自https://blog.csdn.net/weixin_42660771/article/details/84035153 1.代码的功能 一个python的文件有两种使用的方法,第一是直接作为 ...

  6. python解释器遇到if __name__=="__main__"会如何做?

    python解释器遇到if __name__=="__main__"会如何做 # Threading example import time, thread def myfunct ...

  7. Python3:if __name__ == '__main__' 详解

    一般在风格比较好的代码中会有一行if __name__ == '__main__' :代码,这里说明一下这句代码的用处,先上两个代码test1.py和test2.py: # test1.py prin ...

  8. 【python】if __name__ == '__main__'

    转载自:http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792463.html 当你打开一个.py文件时,经常会在代码的最下面看到if __na ...

  9. python if __name__ == '__main__' 作用

    转载:https://stackoverflow.com/questions/419163/what-does-if-name-main-do When your script is run by p ...

随机推荐

  1. 【Yom框架】漫谈个人框架的设计之一:是IRepository还是IRepository<T>?

    前言                                                                                                   ...

  2. java文件上传--基于ajaxFileUpload+struts2

    jQuery插件ajaxFileUpload可以实现ajax文件上传,使用非常简单. 下面做一个简单的demo(以上传图片为例),实现图片上传,图片显示,图片下载 注:以下的代码是在项目的基础上进行开 ...

  3. AOP的成员介绍

    AOP(Aspect Oriented Programming)面向切面编程,AOP的作用不过多介绍,本文是主要是介绍AOP的成员,是我在复习的时候记录的一些笔记,方便以后查阅方便一些. JointP ...

  4. 淘宝ued - 前端智勇大闯关(第三季)答案(更新)

    淘宝ued - 前端智勇大闯关(第三季)答案(更新) 下午在微博上看到了淘宝智勇大闯关第三季的信息,感觉挺有意思的,于是就尝试做了下.附上题目地址: http://ued.campus.alibaba ...

  5. ASP.NET Web API的消息处理管道: HttpRoutingDispatcher

    ASP.NET Web API的消息处理管道: HttpRoutingDispatcher 认情况下,作为消息处理管道“龙头”的HttpServer的Dispatcher属性返回一个HttpRouti ...

  6. grunt 上手

    grunt 上手 开始上手 Grunt 和 grunt 插件都是通过 npm 安装, Node.js 包管理器管理的. Grunt 0.4.x 版本需要Node.js 版本号不低于0.8.0. 一.安 ...

  7. boost xpressive 例子

    1.效果图: 我有一个wordpress博客,每次在csdn上写完博客,都需要复制到wordpress中,还需要手动修改<pre>和图片地址,比较麻烦,所以做了这个工具. 功能: 1.把C ...

  8. sql连接查询 2011-10-10 23:13 (QQ空间)

    在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中,通过连接运算符可以实现多个表查询.连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一 ...

  9. HDU 2040 亲和数

    Problem Description 古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284. ...

  10. Java 在本地文件中查找固定字符串

    适用范围:只适用于在文本文档中查找(如,txt.java.c等等,并不适用与doc.xls等等这些文件),可嵌套文件夹.但是对中文不支持. 例如:文件夹:F:/demo 子文件夹:F:/demo/er ...