我们知道,python中变量的命名规则中有一条是:变量名只能以字母或下划线开头,但以下划线开头的变量在python中有特殊涵义。__name__
变量就是一个有特殊含义的python变量。我们见过做多的是if __name__ == '__mian__':
这种用法,下面我们来对__name__
的用法做出详解。
背景知识
在对__name__
进行解释之前,先来了解几条需要用到的python知识。
- python中前后加了下划线的变量是系统定义的名字。普通变量不要以下划线开头命名变量。
- python中有许多模块,每个模块都是一个py文件,这些py文件即模块是可以独立运行的。这不同于C/C++的头文件。
- import某个python模块时,会自动执行一次所Import的模块。只不过一般情况下自动执行模块只是为调用其中的某些功能做准备而没有任何输出,例如python编译器知道了此模块有哪些函数可以使用。
__name__
的含义
__name__
是一个标识模块名字的系统变量。__name__
在不同的情况下有不同的含义,分两种情况:- 假如当前模块是主模块,也就是调用其他模块的模块,那么这个模块的名字
__name__
就是字符串"__main__"
,而if __name__ == '__main__':
语句也就是判断模块名字是不是__main__
来判断当前模块是不是主模块。 - 假如当前模块是被调用的模块,也就是被主模块Import的模块,那么这个模块的名字
__name__
就是py文件的名字(不加后面的.py),这是if __name__ == '__main__':
判断为False
,在import时执行此模块不会执行if
后的内容。
- 假如当前模块是主模块,也就是调用其他模块的模块,那么这个模块的名字
- python的函数也是一种对象,函数对象也有一个叫做
__name__
的属性,表示函数的名字。
例子
- 如果模块被导入,
__name__
的值为模块名字。 - 如果模块被直接执行,
__name__
的值为”__main__"
。
下面是一个使用范例:
- test1.py的内容如下:
# test1.py
def test():
print("__name__ = ", __name__)
if __name__ == '__main__':
test()
执行结果:
- test2.py的内容如下:
# test2.py
import test1
def test():
print("__name__ = ", __name__)
if __name__ == '__main__':
test()
print('test1 __name__ = ', test1.__name__)
执行结果: