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

2023-11-17

上篇我们介绍了模块和如何使用模块,本篇将会介绍与模块共同会出现的问题,那就是在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的作用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐