if __name__ == '__mian__'的作用?

编程入门 行业动态 更新时间:2024-10-25 05:15:32

if __name__ == '__mian__'的<a href=https://www.elefans.com/category/jswz/34/1768738.html style=作用?"/>

if __name__ == '__mian__'的作用?

if _name_ == __mian__的作用?

当python的解释器在读取一个python源文件时,它会做两件事:

  • 为该文件设置一些特殊变量,如__name__

  • 逐行执行原文件中的代码

源文件有一个特殊的变量_name_,它的作用是标识源文件是作为主程序来执行,还是作为模块被其他主程序导入

我们来举一个例子来说明__name__实际起到的作用是怎么样的。

When your module is the main porgram

假设有一个foo.py文件:

# this is foo.py
print("before import")
import mathprint("before functionA")
def functionA():print("Function A")print("before functionB")
def functionB():print("Function B {}".format(math.sqrt(100)))print("before __name__ guard")
if __name__ == '__main__':functionA()functionB()
print("after __name__ guard")
print(__name__)

如果将foo.py作为主程序来运行,其执行结果如下:

before import
before functionA
before functionB
before __name__ guard
Function A
Function B 10.0
after __name__ guard
__main__

可以看到,这个时候foo.py的特殊变量__name__的值为__main__

When your module is imported by another

如果我们将foo.py作为一个模块导入到另一个py文件中,且将这个py文件作为主程序来运行的时候会发生什么呢?

假设我们有一个foo1.py文件

print("before foo")
import fooprint("after foo")print("this is foo1")

我们将foo1.py作为主程序来运行,其执行结果为:

before foo
before import
before functionA
before functionB
before __name__ guard
after __name__ guard
foo
after foo
this is foo1

我们发现,foo.py文件的_name__变量的值为foo,即文件名,而且,foo.py文件中中if _name==__main__中的代码块没有执行。

这是因为当一个py文件作为模块被外部程序调用时,编译器会将__name__设置为该文件的文件名(不包含后缀.py)。

Summary

  • __name__是python源文件的一个特殊变量,当解释器在读取源文件时会设置这些特殊变量的值
  • 当一个py文件作为主程序运行时,解释器会把该文件的__name__值设置为__main__
  • 当一个py文件作为模块被其他文件导入时,解释器会把该文件的__name__的值设置为该文件的文件名,不包含.py后缀

Why do that?

因为一个源文件中,可能有一段代码是当该文件作为模块被外部程序调用时你不想执行的,那么我们就可以通过__name__的值来将这部分代码设置为只有该文件作为主程序才会被执行。

__name__的作用就是实现在两种情况中:

  1. py文件作为主程序运行
  2. py文件作为模块被其他主程序导入

根据情况的不同,选择执行py文件的代码

更多推荐

if __name__ == '__mian__'的作用?

本文发布于:2023-07-28 15:43:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1239189.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:作用

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!