[python] if __name__ == ‘__main__‘

1. 一个简单的例子

先来看一份代码:

# test.py
def addFunc(a, b):
    return a + b

print('the result of test is: 1 + 1 = ', addFunc(1, 1))
# mode.py
import test
print('The result of test modula is :', test.addFunc(12, 23))

执行 mode.py 输出如下:

the result of test is: 1 + 1 =  2
The result of test modula is : 35

这里输出的语句中,同时包含了 test.py 和 mode.py 中的内容。那么问题来了,很多时候调用者并不需要输出 test.py 里面的内容,这个时候应该怎么处理呢?添加另外一个不输出的版本 test_no_print.py ?
python 中提供了 __name__ 这个系统变量来解决这个问题,先看修改后的代码:

# test.py
def addFunc(a, b):
    return a + b

if __name__ == '__main__':
    print('the result of test is: 1 + 1 = ', addFunc(1, 1))

单独执行 test.py 结果如下:

the result of test is: 1 + 1 =  2

没有问题,这是我们想要的结果。
执行 mode.py:

The result of test modula is : 35

这恰恰也是我们想要的结果。
那么问题来了,__name__ 里面究竟是个什么神奇的值?

2. __name__ 的值

修改 test.py 如下使其输出 __name__ 的值:

# test.py
def addFunc(a, b):
    return a + b

if __name__ == '__main__':
    print('the result of test is: 1 + 1 = ', addFunc(1, 1))

print("The value of '__name__' is ", __name__)

分别执行 test.py 和 mode.py 结果如下:

the result of test is: 1 + 1 =  2
The value of '__name__' is  __main__
The value of '__name__' is  test
The result of test modula is : 35

可以看到,单独执行 test.py 时,__name__ 的值是 ‘__main__’,而作为模块被 import 到其他文件中调用时,__name__ 的值则是模块的名字。
我们知道,有两种方法可以使用 python 文件来执行它实现的功能,一个是直接运行,一个是被其他文件导入后调用。当它被直接运行时,当前文件就是程序的主入口,这相当于 C 或者 Java 中的 main 函数。当它被其他文件导入调用时,程序的入口自然在其他文件中。
__name__ 是 python 的内置属性,这个系统全局变量用来表示当前模块的名字。而 __main__ 就是一个代表程序入口的字符串。 因此 if __name__ == ‘__main__’ 其实就是判断程序的入口是不是当前的文件!

你可能感兴趣的:(python,python,开发语言)