__name__
和__main__
认识
作用:一般用于测试程序的功能,if __name__ == '__main__':
下面的代码会被执行,但当前.py
文件被当做模块导入的时候,main下面的代码就不会被执行,防止测试代码被执行。
语法:
if __name__ == '__main__':
要执行的测试模块
if __name__ == "__main__":
可以看成是python程序的入口,就像java
中的main()方法,但不完全正确。
在.py
文件中,除了def后面定义函数外的代码都会被认为是“main”方法中的内容,从而从上而下执行。
如果只是写一个print('hello world'),那这一句话就是一个程序,因此不需要所谓的"main"方法入口,直接运行测试就可以。
但如果是测试函数功能,我们就需要在.py
文件中写上if__name__=="__main__"
,再调用函数,当然,如果你不写的话,也没关系,也可以直接将函数加括号进行调用。
我们写的目的就是防止后面会把当前.py
文件当做模块导入其他.py
文件中,从而误触发测试代码。
__name__
的变化
1、__name__
其实就是一个内置属性,在自己的py文件中被执行,__name__
属性的值就是__main__
:
示例代码:
# test.py
print("first")
def say_hello():
print(__name__)
if __name__ == '__main__':
print(__name__)
say_hello()
运行结果:
first
__main__
__main__
2、将test.py
文件导入其他文件中,__name__
就会变为当前模块的名字,例如:__test__
。
实例代码:
# work.py
import test # 导入test
if __name__ == '__main__':
test.say_hello()
print(__name__)
执行结果:
first
test
__main__
总结:python不像JAVA中一样拥有main()方法的特点。所谓的入口其实也就是一个if条件语句,判断成功就执行下面if中的代码。JAVA等其他语言中会有特定的内置函数去识别main()方法入口,在main()方法中从上而下执行。