__name__特殊变量

Jinku Hu 2023年1月30日 2018年7月23日
  1. if __name__ == '__main__'
  2. 函数或者类的 __name__
  3. __name__在日志 logging 中的使用
__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__)

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

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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