【转载】__name__ == "__main__": 你认识我么?
《笨方法学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__": 你认识我么?的更多相关文章
- 转载:Python中的if __name__ == '__main__'
刚开始学习Python时,对于有些书出现的函数带有“if __name__ == '__main__'”总是迷惑不解,比如<dive into Python>中开头的哪个根据输入的数字计算 ...
- 【转载】如何简单地理解Python中的if __name__ == '__main__'
原帖:https://blog.csdn.net/yjk13703623757/article/details/77918633 通俗的理解__name__ == '__main__':假如你叫小明. ...
- python中if __name__ == '__main__': 的解析(转载)
当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一个 ...
- 小白的Python之路 if __name__ == '__main__' 解析
if __name__ == '__main__' 参考文献: http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792463.html http ...
- Python 中if __name__ == '__main__': 的作用和原理
转自https://blog.csdn.net/weixin_42660771/article/details/84035153 1.代码的功能 一个python的文件有两种使用的方法,第一是直接作为 ...
- python解释器遇到if __name__=="__main__"会如何做?
python解释器遇到if __name__=="__main__"会如何做 # Threading example import time, thread def myfunct ...
- Python3:if __name__ == '__main__' 详解
一般在风格比较好的代码中会有一行if __name__ == '__main__' :代码,这里说明一下这句代码的用处,先上两个代码test1.py和test2.py: # test1.py prin ...
- 【python】if __name__ == '__main__'
转载自:http://www.cnblogs.com/xuxm2007/archive/2010/08/04/1792463.html 当你打开一个.py文件时,经常会在代码的最下面看到if __na ...
- python if __name__ == '__main__' 作用
转载:https://stackoverflow.com/questions/419163/what-does-if-name-main-do When your script is run by p ...
随机推荐
- window.parent与window.opener的区别
有这样一个需求,弹出一个新窗口 并从该新页面的select选择框中选择需要的类别,再返回到之前的父窗口页面的某个文本框中.这里就要用到window.parent和window.opener 如题两种方 ...
- HDU3930(离散对数与原根)
题目:Broot 题意:给出k,m,newx的值,求方程x^k(mod m)=newx的解,其中m为素数. 解法步骤: (1)先暴力求m的原根g (2)大步小步求g^t1(mod m)=newx (3 ...
- linux下面安装配置mongoDB
不知道为什么官网最新的2.4我一直解压失败 下载之前确认一下你的操作系统是64位的还是32位的对应去下载 64位链接:http://fastdl.mongodb.org/linux/mongodb-l ...
- 数据结构之树(Tree)(一) :树
ps:好久没用动手写blog了,要在这条路上不断发展,就需要不停的学习,不停的思考与总结,当把写blog作为一种习惯,就是自我成长的证明,Fighting!. 一.简介 树是一种重要的非线性数据结构, ...
- replace()随笔
今天在读jquery源码时,发现一个以前自己不曾注意过得问题,就是replece()的第二个参数为函数时的问题,以前只是知道replace()的第二个参数可以为函数,但是不知道该怎么操作,今天看到源码 ...
- php中empty和isset的区别
比如: $_POST[ 'test']= ' ';那么: isset($_POST[ 'test']) ===> true; empty($_POST[ 'test']) ===> tru ...
- java参数传递(值传递还是引用传递)
Java中的参数传递机制一直以来大家都争论不休,究竟是“传值”还是“传址(传引用)”,争论的双方各执一词,互不相让.不但“菜鸟”们一头雾水,一些“老鸟”也只知道结果却说不出所以然来.我相信看过下面的内 ...
- Mybatis-Spring SqlSessionTemplate 源码解析
在使用Mybatis与Spring集成的时候我们用到了SqlSessionTemplate 这个类. <bean id="sqlSession" class="or ...
- 【终极】Dynamic Web Module 3.0 requires Java 1.6 or newer
今天在用maven+ssm做项目的时候,右键项目properities设置project facet,勾选dynamic WEB module时一直勾不上,网上找了很多教程都不行, 有说在pom.xm ...
- 在html页面中展示JSON
背景: 有时候我们需要将json数据直接显示在页面上(比如在做一个接口测试的项目,需要将接口返回的结果直接展示),但是如果直接显示字符串,不方便查看.需要格式化一下. 解决方案: 其实JSON.str ...