[Python] if __name__ == ‘__main__‘的作用

在编写Python程序的时候,总是习惯性的在文件的末尾添加这么一段代码

if __name__ == "__main__":
    ...

从上述代码可以看出if __name__ == "__main__":是个条件语句,判断__name__这个变量是否等于__main__

我们在脚本demo.py文件中执行dir()函数,获取当前模块的变量名,并判断当前模块是否包含__name__变量

# demo.py
print(dir())
# True
print('__name__' in dir())

上述脚本文件中我们没有定义任何变量,从而可知道__name__是Python内置的一个属性 

我们打印__name__,看看该变量的值

# demo.py
print(dir())
# True
print('__name__' in dir())

print('__name__:',__name__)  # __name__: __main__

从上述结果可以了解到变量__name__的值为__main__,我们继续在文件的末尾添加 if __name__ == "__main__":代码

# demo.py
# True
print('__name__' in dir())

print('__name__:',__name__)  

print('Hello123')

if __name__ == '__main__':
    print('Hello456')

运行结果如下所示

True
__name__: __main__
Hello123
Hello456

提示Tips

__name__ 是个变量,每个.py文件都有这个变量,'__main__ ' 是个普通的字符串,不是变量,但可以作为变量的值进行使用

我们在同一文件夹下创建一个名为import_demo.py脚本文件,输入如下代码

# import_demo.py
import demo

上述脚本运行结果如下所示

True
__name__: demo
Hello123

我们从上述结果可以发现,运行import_demo.py脚本后,demo.py脚本中的__name__变量值是'demo',由于__name__变量值不再是'__main__',所以 __name__ == "__main__"的结果是False,不执行print('Hello456')操作

提示Tips

变量__name__所在的 .py 文件没被别的 .py 文件调用时,其值是'__main__ ' 

变量__name__所在的 .py 文件被别的 .py 文件调用时,它的值就不再是 '__main__ '了,而是变成它所在 .py的文件名

练习案例

定义一个实现加法功能的py代码

# add_.py
def add(a, b):
    return a + b

res = add(2, 3)
print(res)

定义另一个py代码,导入add_.py中的add方法,类似模块导入

# use_.py
from add_ import add

res = add(2, 3)

print(f'结果是:{res}')  

运行结果如下所示

5
结果是:5

我们只想要一个结果5,但是结果输出两个,我们可以把add_.py代码中的测试代码,放在if __name__== '__main__':中,use_.py执行add()就不会执行测试代码

# add_.py

def add(a, b):
    return a + b

if __name__=='__main__':
      res = add(2, 3)
      print(res)

运行use_.py,输出结果如下所示

结果是:5

if __name__ == '__main__'的作用

python文件通常有两种使用方法:

① 作为脚本直接执行

② import到其他的 python 脚本中被调用执行

if __name__ == '__main__':的作用就是控制这两种情况执行代码的过程,在 if __name__ == '__main__':下的代码只有在第一种情况下才会被执行,而 import 到其他脚本中是不会被执行的

猜你喜欢

转载自blog.csdn.net/Hudas/article/details/130261786