前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 中 if _ _name_ _ == '_ _main_ _' 到底是什么意思?

Python 中 if _ _name_ _ == '_ _main_ _' 到底是什么意思?

作者头像
数据STUDIO
发布2024-06-04 18:20:41
720
发布2024-06-04 18:20:41
举报
文章被收录于专栏:数据STUDIO数据STUDIO
希望这篇文章清楚易懂。

初识 __name__

假设我们有一个 Python 脚本 a.py

代码语言:javascript
复制
# a.py

print(__name__)    

# python a.py
# __main__

当我们用python a.py命令运行a.py时,a.py内的__name__变量会自动被设置为__main__

代码语言:javascript
复制
# b.py

print(__name__)

# python b.py
# __main__

同样,如果使用 python b.py 命令运行 b.pyb.py__name__ 变量将自动变成 __main__

如果我们直接运行 .py,文件中的 __name__ 会自动变成'__main__'

有 2 个 .py 文件

假设有 2 个文件 a.pyb.py

代码语言:javascript
复制
# b.py

def hello_b():
  print('hello_b __name__:', __name__)
# a.py

from b import hello_b

hello_b()

# python a.py
# hello_b __name__: b

a.py 中,从 b.py 导入一个函数。在 b.py 中的这个函数中,打印 __name__。然后使用 python a.py直接运行a.py(注意,b.py不会直接运行)

由于直接运行了 a.py,所以 a.py 中只有 __name__'_main__'。从 b.py 中导入的 __name__ 将是 'b' 而不是 '__main__'

有 3 个 .py 文件

代码语言:javascript
复制
# b.py

def hello_b():
  print('from b.py:', __name__)
# c.py

def hello_c():
  print('from c.py:', __name__)
# a.py

from b import hello_b
from c import hello_c

hello_b()  # from b.py: b
hello_c()  # from c.py: c

在此示例中,a.py 分别从 b.pyc.py 中导入了一个函数,这两个函数都打印了 __name__。由于我们直接运行 a.py,因此 b.py 中的 __name__'b',而 c.py 中的 __name__'c'

这解释了为什么我们会在打印语句中看到 from b.py: bfrom c.py: c

意外运行我们不想运行的代码

代码语言:javascript
复制
# b.py

def hello_b():
  print('from b.py:', __name__)

print('@公众号:数据STUDIO')
# c.py

def hello_c():
  print('from c.py:', __name__)
# a.py

from b import hello_b
from c import hello_c

hello_b() 
hello_c() 

在这里,我们在 b.py 中添加了额外的打印语句,并直接使用 python a.py 运行 a.py。输出结果如下

代码语言:javascript
复制
@公众号:数据STUDIO
from b.py: b
from c.py: c

在这里,请注意 @公众号:数据STUDIO 也被打印出来了。这是因为我们从 b.py 中导入了一个函数。

添加 if __name__ == '__main__'

代码语言:javascript
复制
# b.py

def hello_b():
  print('from b.py:', __name__)

if __name__ == '__main__':
  # 只有直接运行 b.py 时才能运行
  # 例如,使用 "python b.py"
  print('@公众号:数据STUDIO')
# c.py

def hello_c():
  print('from c.py:', __name__)
# a.py

from b import hello_b
from c import hello_c

hello_b() 
hello_c()

在这里,如果我们运行 python a.py,会得到这样的输出:

代码语言:javascript
复制
from b.py: b
from c.py: c

这是因为我们在文件 b.py 中添加了 if __name__ == '__main__' 的语句。只有在直接运行 Python 脚本时,才会执行此处的代码块。

在这个例子中,print('@公众号:数据STUDIO') 只有在我们直接运行 b.py 文件时才会被执行,也就是说,我们使用命令 python b.py

if __name__ == '__main__' 用于防止意外运行我们不想运行的代码。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据STUDIO 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 初识 __name__
    • 有 2 个 .py 文件
      • 有 3 个 .py 文件
      • 意外运行我们不想运行的代码
      • 添加 if __name__ == '__main__'
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档