掌握Python的X篇_23_main的作用(python规范写代码中,__name__内置变量的使用)

本文围绕Python中__name__变量展开。先介绍__name__是特殊“内置变量”,用于区分模块和主文件;接着指出模块import存在测试代码干扰问题;然后说明__name__值随文件加载情况变化,可借此区分测试和模块使用,解决import不便。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上篇我们介绍了模块和如何使用模块,本篇将会介绍与模块共同会出现的问题,那就是在python规范写代码中会使用到__name__这种特殊的变量。

大家可能已经见过,规范的python代码,入口代码应该类似

if __name__ == "__main__":
    print("first line")

此处是否有if __name__ == "__main__":,程序运行之后都会输出first line,为什么要这样写呢?就需要从原理去了解。

1. __name__是什么

__name__是一个特殊的“内置变量”,它的值会随着程序启动情况的不同而不同
python中使用这个变量,来区分模块和主文件。

  • 所谓模块:被import的文件
  • 所谓的主文件:被python直接执行的文件
    为什么python会使用__name__这个变量,这就需要从模块import的不方便来进行讨论

2. 模块import的不方便

如果(不规范地)写了一个模块,并且在这个模块中,包含了测试的代码,以上篇中使用到的mymodule.py中增加两行测试程序,得到如下程序内容:

def add(x,y):
    return x+y
def max(x,y):
    if x > y:
        return x
    else:
        return y

print(add(10,30))
print(add(30,40))   

单独运行时,输出为40 70这是正常的,但是如果我在另一个程序文件fistpy.py中,importmymodule.py,进行加法运算并显示,得到如下程序:

import mymodule

print("first.py",mymodule.add(30,30))

运行之后结果:

40
70
first.py 60

显然这与我们预期只关注add(30,30)是存在差异的,程序将测试程序段也打印了出来。

这是因为import的本质就是将相应的python文件,复制粘贴到程序中运行,自然就会出现上述的结果。为了解决这个问题,就发明了__name__。

3. __name__的用处

__name__的值会随着py文件的加载情况不同而变化 :

  • 如果py文件作为主文件运行,则值为__main__
  • 如果作为模块加载,则值为模块的名称(路径)
    还是以上述的程序为例:
    mymodule.py代码改为如下:
def add(x,y):
    return x+y
def max(x,y):
    if x > y:
        return x
    else:
        return y

print(__name__)

运行结果:代表其为主文件

__main__

fistpy.py代码改为如下:

import mymodule

运行结果:代表其为模块

mymodule

有什么好处呢?
可以用这种方法来区分是在做测试当前模块有效,还是当做一个模块来使用。
因此可以将mymodule.py改为如下:

def add(x,y):
    return x+y
def max(x,y):
    if x > y:
        return x
    else:
        return y
if __name__ == "__main__":
    print(add(20,40))

作为主程序运行输出为:60

作为模块在fistpy.py中被使用时,if __name__ == "__main__":不成立,就不会影响fistpy.py本身程序的运行结果。

甚至,还有提倡在模块中类似C++/C的如下写法:

def add(x,y):
    return x+y
def max(x,y):
    if x > y:
        return x
    else:
        return y
    
def main():
    print(add(20,40))
if __name__ == "__main__":
    main()

再经过几篇介绍完python中的几个标准库之后,将会介绍更为有趣的内容,无所不能的python。

4. 学习视频地址:main的作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

十月旧城

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

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

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

打赏作者

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

抵扣说明:

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

余额充值