【转载】__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 ...
随机推荐
- Java反射——引言
Java反射——引言 原文地址:http://tutorials.jenkov.com/java-reflection/index.html *By Jakob Jenkov Java的反射机制使得它 ...
- Git命令行连Github与TortoiseGit 连Github区别
如果是用git 通过命令行的方式连接github,那么只需要通过命令 $ ssh-keygen -t rsa -C "your_email@youremail.com" 生成rsa ...
- oracle中backup模式
在数据库打开的情况下备份(归档模式),把表空间或者数据库置于backup 模式下, 如: SQL> alter database begin backup; Database altered ...
- linux history 命令详解
linux history 命令详解 显示命令执行时间 linux shell 具有history 功能,即会记录已经执行过的命令,但是默认是不显示命令的执行时间,命令的执行时间,history 已经 ...
- java动态加载配置文件
最近项目中需要做定时任务,即定时数据库的备份.定时时间用户可以在界面中配置,要求配置修改好立即生效. 想不到什么好办法.下面是一种实现思路 把用户配置的时间存到properties配置文件中,定时任务 ...
- [置顶] 和孩子们一起学Python编程
1. 推荐书名 Computer Programming for Kids and Other Beginners in Python, 4Ed.pdf 中文译名:<和孩子们一起学Pyt ...
- 30+WordPress古典风格的主题-古典却不失时尚
通过WordPress古典风格主题,你可以快速的让你的网站呈现古典情调,并在竞争中脱颖而出.古典风格的网页设计是非常受欢迎的,现在,你可能想知道为什么.很多人被古典风格吸引,他们将一些陈旧的,过时的, ...
- VS2012下基于Glut OpenGL glScissor示例程序:
剪裁测试用于限制绘制区域.我们可以指定一个矩形的剪裁窗口,当启用剪裁测试后,只有在这个窗口之内的像素才能被绘制,其它像素则会被丢弃.换句话说,无论怎么绘制,剪裁窗口以外的像素将不会被修改.有的朋友可能 ...
- 高反差保留滤镜学习OpenCV:滤镜系列(11)——高反差保留
这几周笔者几篇文章介绍了改高反差保留滤镜的文章. 关联文章的地址 高反差保留就是高通滤波 r=(pix[x,y]-avg(R))/128 pix[x,y]*r+128*(1-r) #include & ...
- eclipse 导入 Maven 多模块项目
右键 --> Import --> Existing Maven Projects --> 项目目录 选中所有子模块 --> Delete(一定不要勾选Delete proje ...