Python之“if __name__ == ‘__main__‘:“的理解

对于if name == ‘main’:这行代码,刚开始写python时,始终容易忘记他的用法。
其实如果你写过java或者C语言,你会发现在java或者C语言中最开始都会写一个main()函数,
java:

public static void main(String args[ ])

C:

int main()

他们的都有一个共同的作用,就是作为程序入口,也就是说,程序的运行会从main()函数开始,在main函数之前的代码如果不在mian内进行调用,则不会被运行
而python不一样,java、C都是编译型语言,python则是解释型语言。当你编写Python代码时,一个.py文件,会从第一行开始就动态的逐行进行解释,没有一个统一的入口。
我们知道,一个.py文件除了可以被直接运行外,还可以作为模块(库),被其他.py文件导入。不管是直接运行还是被导入,.py文件的最顶层代码都会被运行。而当一个.py文件作为模块被导入时,我们可能希望一部分代码不被运行。例:
创建一个data.py文件

a=1
b=1

def data():
    print(a,b)

data()

data函数会打印a,b的值
在这里插入图片描述
然后创建一个add.py文件,在此文件中引入data.py文件

import data

def add():
    return data.a+data.b

print(add())

add函数使用了data的a,b的值,此时运行add函数,打印如下:
在这里插入图片描述
不仅打印了a+b的值,还打印了a,b的值,但是如果我们不希望a,b的值被打印,要怎么办呢?
在data函数前加一个if name == ‘main’:即可,例:

a=1
b=1

def data():
    print(a,b)

if __name__ == '__main__':
    data()

此时我们再去运行add.py,结果如下:
在这里插入图片描述
没有打印a,b的值了。
原理解析:
name__属于python的内置类,代表对于程序的名称,如果当前运行的程序是主程序,name__的值就是__main,例如你运行data文件时,data就是主程序,打印__name__的值就是__main
我们在data中加入
print(name)
return name
再运行data.py

a=1
b=1

def data():
    print(a,b)
    print(__name__)
    return __name__
if __name__ == '__main__':
    data()

输出结果为:在这里插入图片描述
说明data文件的__name__为__main__。
将add文件中return data.a+data.b改为:return data.a+data.b,data.name
这时再去运行add.py,结果为:
在这里插入图片描述
当我们在add文件中运行时,data不是主程序了,add.py才是主程序,所以这时,data的__name__的值为模块名

所以当我们运行add.py时,if name == ‘main’:后面的代码就不会被运行了,因为在add.py中,data的__name__ != ‘main

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力码代码的小赵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值