Python - 属性简介"__name__"

模块是对象,并且每个模块都有一个内置属性__name__。
当一个模块被直接运行的时候,该模块__name__的值就等于缺省的'__main__'。
如果一个模块被import ,那么这个被引入模块__name__的值就等于该模块名,也就是文件名去掉py扩展名的部分。
也就是说__name__的值表明了当前py文件调用的方式,因此可以用if __name__ == '__main__'来判断是否是在直接运行该.py文件。

示例:test.py

1 # -*- coding: utf-8 -*-
2 def sample():
3     print "test is running"
4 if __name__ == "__main__":    # 自运行时调用该程序块
5     print "test main is working"
6 if __name__ == "test":         # import时调用该程序块
7     print "test is invoked"

直接执行:

>python test.py
test main is working

import执行:

>>> import test
test is invoked
>>>
>>> test.__name__
'test'
>>>
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'test']
>>>
>>> dir(test)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'sample']
>>>
>>> __name__
'__main__'
>>>
>>> show = test
>>> show.sample()
test is running
>>>

__name__属性可以应用在代码重用、测试模块、基类、等等方面
比如想利用一个py文件中的函数:
可以在此py文件中加上if __name__ == "__main__"这句代码,然后import这个py文件就可以调用其中的函数了。

 

posted @ 2016-11-02 10:19  Anliven  阅读(678)  评论(0编辑  收藏  举报