《笨方法学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. 竞价广告系统-ZooKeeper介绍

    ZooKeeper介绍 为了讲述的完整性,介绍一下ZooKeeper.ZooKeeper在Index和Ad Server里使用比较多,虽然它可能没有google的Chubby好,但它是开源的工具.举一 ...

  2. 开始使用THREE.JS

    开始使用THREE.JS 译序 Three.js是一个伟大的开源WebGL库,WebGL允许JavaScript操作GPU,在浏览器端实现真正意义的3D.但是目前这项技术还处在发展阶段,资料极为匮乏, ...

  3. tornado with MySQL, torndb, django model, SQLAlchemy ==> JSON dumped

    现在,我们用torndo做web开发框架,用他内部机制来处理HTTP请求.传说中的非阻塞式服务. 整来整去,可谓之一波三折.可是,无论怎么样,算是被我做成功了. 在tornado服务上,采用三种数据库 ...

  4. 最好用的mysql密码忘记的解决方法

    在windows下: 打开命令行窗口,停止mysql服务:Net stop mysql启动mysql,一般到mysql的安装路径,找到 mysqld-nt.exe (或mysqld.exe)执行:my ...

  5. 分享个自己做的CSDN刷下载积分软件

    对于评论里有人反映说,运行完后自动关机了,我要在这解释下,不好意思了亲们,由于昨晚开这个通宵刷积分,就加了个功能,刷完所有可刷积分后自动关机省点电.今天发布的时候忘记取消了.这里给大家带来不便请大家包 ...

  6. 最新FFMPEG解码流程

    FFMPEG解码流程: 1. 注册所有容器格式和CODEC:  av_register_all() 2. 打开文件:                    av_open_input_file() 3 ...

  7. C++利用不完全实例化来获得函数模板参数的返回值和参数

    有一些模板会以函数为模板参数,有时候这些模板要获得函数的返回值和参数.如在boost中的signal和slot机制,就存在这样情况. 那么,我们如何得到这些信息呢? 我们使用C++不完全实例化来实现. ...

  8. Linux C编程一站式学习读书笔记——socket编程

    前言 研一的时候写过socket网络编程,研二这一年已经在用php写api都快把之前的基础知识忘干净了,这里回顾一下,主要也是项目里用到了,最近博客好杂乱啊,不过确实是到了关键时刻,各种复习加巩固准备 ...

  9. Oracle层次查询和with函数的使用

    开发中大家应该都做过什么类似部门管理这样的功能,一般情况下一个部门下面还有下一级部门(子部门),这个层级就类似一棵树.这种情况下一般会把父级部门和子级部门分成2个或者多个表,这种算是比较常规的做法:有 ...

  10. mysqldump备份错误:诡异的#mysql50#.mozilla数据库

    今天测试mysql自动备份功能 在red_hat_linux5系统下安装了mysql_5.5 系统提示执行脚本抛错, 手动执行脚本, 返回错误:mysqldump: Got error: 1102: ...