Python中的if __name__ == ‘__main__‘

  • 在具体说明if name == 'main’功能前,先从一个简单的实例直观上感受一下。
# const.py
 
PI = 3.14
 
 
def train():
    print("PI:", PI)
 
train()
# 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 改一下:
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 的值。

可以做一下测试:

# test.py
print("hahaha")
print(__name__)
 
if __name__ == '__main__':
    print("I'm test.py")

在这里插入图片描述

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

举个例子:

# 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()
# 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,结果如下:
    在这里插入图片描述

2. name

2.1 __name__是内置变量,可用于表示当前模块的名字(见上)。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值