很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main__' 的作用,到底干嘛的?
有句话经典的概括了这段代码的意义:
“Make a script both importable and executable”
意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行。
这句话,可能一开始听的还不是很懂。下面举例说明:
先写一个模块:
#module.py
def main():
print "we are in %s"%__name__
if __name__ == '__main__':
main()
这个函数定义了一个main函数,我们执行一下该py文件发现结果是打印出”we are in __main__“,说明我们的if语句中的内容被执行了,调用了main():
但是如果我们从另我一个模块导入该模块,并调用一次main()函数会是怎样的结果呢?
#anothermodle.py
from module import main
main()
其执行的结果是:we are in module
但是没有显示”we are in __main__“,也就是说模块__name__ = '__main__' 下面的函数没有执行。
这样既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次。这才是关键。
总结一下:
如果我们是直接执行某个.py文件的时候,该文件中那么”__name__ == '__main__'“是True,但是我们如果从另外一个.py文件通过import导入该文件的时候,这时__name__的值就是我们这个py文件的名字而不是__main__。
这个功能还有一个用处:调试代码的时候,在”if __name__ == '__main__'“中加入一些我们的调试代码,我们可以让外部模块调用的时候不执行我们的调试代码,但是如果我们想排查问题的时候,直接执行该模块文件,调试代码能够正常运行!
转自:
http://www.jb51.net/article/51892.htm
分享到:
相关推荐
很多新手刚开始学习python的时候经常会看到python 中__name__ = \’__main__\’ 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ‘__main__’ 的作用,到底干嘛的? 有句话经典的概括了...
在Python脚本的顶级代码块(即不在任何函数或类定义内)中,如果`__name__`的值等于`'__main__'`,那么意味着这个脚本是直接执行的,而不是被其他模块导入的。这是因为在直接执行脚本时,Python将该脚本的`__name__`...
del是python关键字,就像def、and、or一样。它不是字典、列表的方法,但是...if __name__=='__main__': a=1 # 对象 1 被 变量a引用,对象1的引用计数器为1 b=a # 对象1 被变量b引用,对象1的引用计数器加1 c=a #1对
python中有一个非常有用的语法叫做生成器,所利用到的关键字就是yield。有效利用生成器这个工具可以有效地节约系统资源,避免不必要的内存占用。 一段代码 def fun(): for i in range(20): x=yield i print('good...
注:使用的是Python2.7。 一、实例方法 实例方法就是类的实例能够使用的...if __name__ == ‘__main__’: foo01 = Foo(‘letian’) foo01.hi() print type(Foo) print type(foo01) print id(foo01) print id(Foo)
if __name__ == '__main__': main() ``` 在这里,`@click.option` 装饰器用于定义命令行参数。`-n` 是短格式参数,`--num` 是长格式参数,`help` 参数提供了参数的帮助信息。在 `main` 函数中,`num` 参数用于接收...
### 深入浅析Python定时杀进程 #### 背景与问题描述 在进行网页爬取等长时间运行的任务时,可能会遇到某些进程(如PhantomJS)卡住不响应的问题,导致整个脚本无法继续执行。为了解决这个问题,本文档介绍了一种...
在Python编程中,了解如何获取和操作对象的信息是至关重要的。本文将深入解析Python中用于获取对象信息的三个核心函数:`type()`、`isinstance()` 和 `dir()`。 首先,`type()` 函数用于确定对象的类型。通过调用 `...