__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__)
这意味着模块的名称将会显示在日志中,从而更容易查看消息的来源。
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn