每个模块都有一个__name__属性(注意__name__两端各有两个下划线),该属性保存当前模块执行过程中的名称。
当一个程序模块独立运行时,该__name__属性自动被赋予值为__main__的字符串。
如果一个程序模块被其他程序通过import导入使用,则其__name__属性自动被赋予值为模块名(文件名)的字符串。
-------------------------------------
以上的解释简单易懂。👍
演示:
创建了一个Python模块,模块里有两个函数(图1)。

写第二个模块(Python任意一个脚本本身就可以视作一个模块/他人的模块),并通过import的方式导入first_module模块的功能函数firstFunction和secondFunction(当然,也可以用*表示导入所有的功能函数)(图2)。

second_module.py脚本执行结果(图3)。
Python本身是严格按照从上到下的顺序原则,因此先执行了第一个firstFunction()函数语句,因为此刻,first_module模块是被second_module.py脚本通过import方式调用了。因此,__name__属性自动被赋予值为模块名(文件名)的字符串,即first_module这个字符串。
那第二个firstFunction()语句为什么会执行呢?即,为什么if __name__ == '__main__':结果为真?
原因:当一个程序模块独立运行时(即此刻的second_module.py脚本正在被独立运行),该__name__属性自动被赋予值为__main__字符串。因此,second_module模块里的__name__的值为__main__。自然判断结果为真/Ture。
由于firstFunction()是被调用的first_module模块里的函数,因此,执行first_module模块里的函数里的__name__的值自然是被调用的模块名,即first_module。

两篇不错的贴子:
https://zhuanlan.zhihu.com/p/147149079
重点句:小问题可以用函数来表示,每一个函数不要写太多代码,将所有功能都写在一个函数内部是非常不符合软件工程规律的。 记住一个函数只完成一个小功能,初学者最喜欢将所有的代码都写在一个函数内部。
https://blog.csdn.net/weixin_39957318/article/details/114408884
重点句:打破惯性思维, 写出地道的代码. main 入口函数是某些语言特有的, 不该在 Python 中 "照猫画虎", 应该了解脚本语言的特点, 写出简洁优雅的风格。
网友评论