《笨方法学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. 安装dnvm

    打开powershell,运行:&{$Branch='dev';iex ((new-object net.webclient).DownloadString('https://raw.gith ...

  2. kindeditor使用方法

    一.下载编辑器 下载KindEditor最新版本(本版本为4.1.10) 下载页面:http://kindeditor.net/down.php 二.部署编辑器 解压kindeditor-x.x.x. ...

  3. C#实战Microsoft Messaging Queue(MSMQ)

    C#实战Microsoft Messaging Queue(MSMQ)消息队列(干货) 前言 在使用MSMQ之前,我们需要自行安装消息队列组件!(具体安装方法大家自己搜一下吧) 采用MSMQ带来的好处 ...

  4. BlackBerry Phonegap项目的搭建

    前言 事实上,这称不上是搭建,因为整个项目依旧是phonegap包里的例子项目,是使用ant来构建的. 准备材料: 1. JDK(不是java系的童鞋请自觉离开) 2. Apache ant http ...

  5. Struts2.1.8 + Spring3.0+ Hibernate3.2整合笔记

    body, p, th, td, li, ul, ol, h1, h2, h3, h4, h5, h6, pre { font-family: simsun; line-height: 1.4; } ...

  6. oracle 11g使用deferred_segment_creation 延迟段创建特性时遇到的问题总结

    总结,下面是两个问题.问题1是用户可以在所有表空间创建表;问题2是exp不能导出空表 问题1: 版本:oracle 11.2.0.1.0 select * from v$version; 创建用户aa ...

  7. 无U盘安装Linux openSUSE(通过硬盘安装Linux)

    一.说明 为什么会想着用硬盘安装Linux?只是因为我陆陆续续买了两个U盘,然后它们都丢了,就没再买了.然而现在又想装个openSUSE,没有U盘,只能想办法通过硬盘安装. 记录自己走过的弯路,同时也 ...

  8. 搞定单模式匹配(简单,KMP)

    模式匹配是查找的一种,分为单模式匹配和多模式匹配.查找,就是在一个集合中查找一个或多个元素,查找一个元素就叫单模式匹配,查找多个元素就是多模式匹配,这里只探讨单模式匹配.虽然模式匹配看上去与数字的查找 ...

  9. IDEA导入maven项目的步骤

    其它的就不多说,直接开始咱们的步骤. 首先,你的装有IDEA,我的是IDEA15的,其次就是你的maven插件来,不过,这些基本的插件,IDEA里基本都给咱下载好了,你就可以直接配置maven.可以去 ...

  10. bzoj1180,2843

    1180: [CROATIAN2009]OTOCI Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 967  Solved: 597[Submit][S ...