在很多Python代码中,在代码的最下方会看到  if __name__ == '__main__':,这段代码到底有什么用呢?

在理解这个语句的作用前,需要知道的是,一般的Python文件后缀为.py,其可以拿来执行,也可以用来作为模块使用import导入。当Python解析器读取一个源文件时它会执行所有的代码。在执行代码前会定义一些特殊的变量。如果解析器运行的模块(源文件)作为主程序,它将会把__name__变量设置成”__main__”。如果只是引入其他的模块,__name__变量将会设置成模块的名字,模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。

在代码下方添加  if __name__ == '__main__':  的主要原因是有时你需要你写的模块既可以直接的执行,还可以被当做模块导入到其他模块中去.通过检查是不是主函数,可以让你的代码只在它作为主程序运行时执行,而当其他人调用你的模块中的函数的时候不必执行。

简单来说就是,方便我们代码复用,也可以测试模块。

举例说明:

创建一个using_name.py

 

#!/usr/bin/env python

# -*- coding:utf-8 -*-

 

print(__name__)

 

直接执行输出:

python using_name.py

__main__    #变成__main__

导入模块后:

 

(py3) smallmars:day6 hexin$ python

Python 3.5.3 (default, Apr 23 2017, 10:52:19)

[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import using_name

using_name      #变成模块名字

>>> 

 

 

修改using_name.py

if __name__ == '__main__':

    print('run  itself')

else:

    print('imported from another module')

 

直接执行输出

python using_name.py

run  itself

导入模块方式

 

(py3) smallmars:day6 hexin$ python

Python 3.5.3 (default, Apr 23 2017, 10:52:19)

[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import using_name

imported from another module    #执行else内容

>>> 

 

posted on 2018-03-10 09:29  FengQIYUN  阅读(170)  评论(0编辑  收藏  举报