前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小蛇学python(21)Python中的if __name__ == '__main__'

小蛇学python(21)Python中的if __name__ == '__main__'

作者头像
用户2145057
发布2020-01-15 11:44:31
3200
发布2020-01-15 11:44:31
举报
文章被收录于专栏:小红豆的数据分析

在具体说明if name == 'main'功能前,先从一个简单的实例直观上感受一下。

代码语言:javascript
复制
# const.py
PI = 3.14
 
def train():
    print("PI:", PI)
 
train()
代码语言:javascript
复制
# area.py
 
from const import PI
 
def calc_round_area(radius):
    return PI * (radius ** 2)
 
def calculate():
    print("round area: ", calc_round_area(2))

calculate()

现在运行area.py文件。运行结果后可以看见,const.py中的train()也被运行了,实际上我们是不希望它被运行,只是想把const.py中 PI 变量导入到 area.py。现在把 const.py 改一下:

代码语言:javascript
复制
PI = 3.14
 
def train():
    print("PI:", PI)
 
if __name__ == "__main__":
    train()

运行area.py文件发现没有执行const.py中train()。

1. if name == 'main'功能

从上述实例可以发现,运行const.py文件时if name=="main": 语句之前与之后代码都被执行,但作为area.py导入文件时就不会执行if name=="main": 语句之后代码。

实际上if name=="main":就相当于是 Python 模拟的程序入口。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个,选中哪个入口程序取决于 name 的值。

可以做一下测试:

代码语言:javascript
复制
# test.py
print("hahaha")
print(__name__)
 
if __name__ == '__main__':
    print("I'm test.py")

可以发现,此时变量name的值为"main",即打印“I'm test.py”。如果运行其他文件,通过运行的文件调用本文件,则不会打印该语句,因为程序入口不对,该语句不执行。

举个栗子:

代码语言:javascript
复制
# receiver.py
print("receiver_haha")

def test():
    print("test can be called!")
 
def receiver_print():
    print("I'm receiver.py")
 
if __name__ == '__main__':
    receiver_print()
代码语言:javascript
复制
# caller.py
import receiver
 
print("caller_haha")

def test():
    print("caller_test can be called!")
 
def caller_print():
    print("I'm caller.py")

if __name__ == '__main__':
    caller_print()
    test()

运行caller.py。可以发现receiver.py中if name=="main"后语句没有执行,因为此时运行的是caller.py,而找不到进去receiver.py的入口!使用这种方法可以控制代码的执行!

2. name

2.1 name是内置变量,可用于表示当前模块的名字

2.2 name是内置变量,可用于反映一个包的结构。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档