模块是对象,并且每个模块都有一个内置属性__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文件就可以调用其中的函数了。