Python __name__=='__main__'作用详解
在阅读别人编写的自定义模块时,你会经常看到下面这句话:
Python 全选
if __name__ == '__main__':
这一行代码的作用是什么?本节详细解释其功能如下。
一般情况下,当我们写完自定义模块后,我们会写一个测试代码来检查一些模块中的每个功能是否能够成功运行。例如,创建一个candf.py文件并编写以下代码:
Python 全选
'''
摄氏度和华氏度的相互转换模块
'''
def c2f(cel):
fah = cel * 1.8 + 32
return fah
def f2c(fah):
cel = (fah - 32) / 1.8
return cel
def test():
print("测试数据:0 摄氏度 = %.2f 华氏度" % c2f(0))
print("测试数据:0 华氏度 = %.2f 摄氏度" % f2c(0))
test()
单独运行此模块文件,您可以看到以下结果:
测试数据:0 摄氏度 = 32.00 华氏度
测试数据:0 华氏度 = -17.78 摄氏度
在candf.py模块文件的基础上,在同一目录下创建另一个demo.py文件,并编写以下代码:
Python 全选
import candf
print("32 摄氏度 = %.2f 华氏度" % candf.c2f(32))
print("99 华氏度 = %.2f 摄氏度" % candf.f2c(99))
运行demo.py文件,运行结果如下:
测试数据:0 摄氏度 = 32.00 华氏度
测试数据:0 华氏度 = -17.78 摄氏度
32 摄氏度 = 89.60 华氏度
99 华氏度 = 37.22 摄氏度
如您所见,Python解释器一起运行模块(candf.py)中的测试代码,这不是我们想要的结果。避免这种情况的关键是让Python解释器知道目前要运行的级别代码是模块文件本身还是其他导入模块的程序。
为了实现这一点,我们需要使用Python内置的系统变量__name__,该变量用于标识模块的模块名。例如,在demo.py程序文件中,添加以下代码:
Python 全选
print(__name__)
print(candf.__name__)
其运行结果为:
__main__
candf
可以看到,当前运行的程序的__name__的值是__main__,而导入到当前程序的模块的__name__的值是它自己的模块名。
因此,如果_ _ name _ _ = =' ___ main __ ':
函数是保证这个表达式只有在模块单独运行时才有效,然后就可以输入这个判断语法并在其中执行测试代码;相反,如果只是作为模块导入到其他程序文件中,这个表达式就不会有效,在其他程序运行时也不会执行这个判断语句中的测试代码。
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
post 管理员