我们通常在看别人写的py程序或者阅读其他的书籍,会在一段代码前面看到
这么一行代码,那么这行代码到底有什么用?我分享一下我的看法。首先看书上的介绍:
除了可以再开发环境或命令提示符环境中直接运行,任何python程序文件都可以作为模块导入并使用其中的对象,这也是实现代码复用的重要形式。通过python程序的__name__属性可以识别程序的使用方式,每个python脚本在运行时都会有一个__name__属性,如果脚本作为模块被导入,则其__name__属性的值自动设置为模块名;如果脚本作为程序直接运行,则其__name__属性的值被自动设置为字符串
.
。
是不是有一些抽象,那么通俗的来说就是,每一个python程序文件都有一个属性名,(你可以理解为是这个程序文件的潜在名字但是是给编译器看的),如果你直接运行该程序文件,它的属性名默认被设置为’__ main__’ ,而如果这个程序文件是在其他程序文件中导入,那么这个程序文件的属性名自动设置为该程序文件的文件名。也许你看到这,就会产生疑惑,这个有什么用呢??
打个比方,你因为某些需求编写了一个脚本文件1,里面是许多定义的函数或者类,那么你编写函数的时候当然需要测试函数能不能完成你需要的功能,这时候就在测试代码前面加上
因为是直接运行该程序文件,它的属性名默认被设置为’__ main__’ ,所以上述的if 语句结果为TRUE,所以会运行下面的测试代码,当你在其他程序文件2需要调用脚本文件1时,那么这个程序文件的属性名自动设置为该程序文件的文件名所以此时if语句的结果为false,脚本文件1 的测试代码则不会运行。
我们通过一个例子来了解
我们创建一个程序文件名为
__name__Test.py
def H():
print("The __name__ is {}".format(__name__))
if __name__ == '__main__':
H()
print("!!!")
运行__name__Test.py结果如下:
那么再创建一个程序文件名字为
__name__Test2.py
import __name__Test
print("Hello word")
运行__name__Test2.py结果如下:
如果再加上一行语句
import __name__Test
print("Hello word")
__name__Test.H()
运行__name__Test2.py结果如下:
可以看到在__name__Test2.py文件运行中__name__Test.py文件中的测试代码并没有运行,达到了我们预想的结果。
有点啰嗦,码字不易,希望能帮助到你~