__name__特殊变量

Jinku Hu 2023年1月30日
  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__)

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

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 创始人。Jinku 在机器人和汽车行业工作了8多年。他在自动测试、远程测试及从耐久性测试中创建报告时磨练了自己的编程技能。他拥有电气/电子工程背景,但他也扩展了自己的兴趣到嵌入式电子、嵌入式编程以及前端和后端编程。

LinkedIn Facebook