__name__特殊变量

if __name__ == '__main__'

在Python程序中,我们会经常看到在代码中有这样的语句,

if __name__ == '__main__':
    xxxxxx

而且一般都是在代码的最后面出现。

__name__是一个特殊变量,用户是没有办法自己给设定值的。它主要用于检查模块是由自己运行还是由于import执行而运行。它可以避免模块在导入时运行其代码的某些部分,所以加入了if __name__ == '__main__'。假如是被调用的情况,那么if __name__ == '__main__'后面的代码就不会在调用的时候执行。

举个例子,我们有两个Python文件,

Test_1.py

print('hello')

Test_2.py

import Test_1.py

我们把两个文件都运行下,Test_1.py会打印出hello,而Test_2.py也会打印出hello

我们把if __name__ == '__main__'加到Test_1.py里面试下,

if __name__ == '__main__':
    print('hello')

然后我们把两个文件再次运行话,就会发现Test_1.py仍会打印出hello,而Test_2.py不会打印任何信息出来了。

函数或者类的__name__

对应函数或者类来讲,__name__特殊变量就是等于函数或者类名称的字符串。

def TestFunc():
    pass

class TestClass():
    pass

print(TestFunc.__name__)
#Out:TestFunc
print(TestClass.__name__)
#Out: TestClass

我们也可以用__name__来得到标准库/模块的名字。

import numpy
print(numpy.__name__)
#Out: numpy

name在日志logging中的使用

在配置日志logging功能时,常见的一种形式就是是使用__name__来得到当前模块的名称。

logger = logging.getLogger(__name__)

这意味着模块的名称将会显示在日志中,从而更容易查看消息的来源。