python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python if __name__ == ‘__main__‘

深入理解python中if __name__ == ‘__main__‘

作者:禾达达

很多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中if __name__ == ‘__main__‘的文章就介绍到这了,更多相关python if __name__ == ‘__main__‘内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文