Python是一门面对对象的语言,随着学习的深入,对Python的理解也有了一些自己的想法。
当我们去运行Python脚本的时候,是将一个Python的主程序入口文件交给Python解释器,当然这中间还由一些源文件转换成pyc的二进制文件等过程,我就暂且跳过。
就我个人知道,给解释器传递的时候,只能传递进去一个Python主文件。这个主文件是一个特殊的存在,Python解释器将逐条解释运行该文件的内容。
这是一个文件,且当文件运行的时候的逻辑,而且当主文件运行的时候,主文件的__file__属性是不显式路径的,这与一个模块中的__file__显示不一样,模块中的__file__是显式绝对路径的。
当一个项目运行的时候,肯定会拆成一个主文件入口,另外的全部都是模块或者包的形式存在与项目中,当主文件运行的时候,各个模块或者包
在Python中将都以模块的形式参与程序的运行。每一个模块都是一个对象,这个对象携带着自己的变量作用域空间当着自己的属性。
在主文件的入口,你还可以导入模块自己,这与主程序入口的文件是两个对象。模块是可以修改的自身的属性的,但主程序入口的文件对象,我无法通过模块的方式找到它,并修改它的属性。
Python一个项目中,有很多不同的模块,不同的包,各个模块与包之间的导入不可能导入一次,然后内存删除一次,这样的话,执行的效率会很低。
Python项目执行中,Python通过sys.module中保存各个被导入过的模块,通过字典的形式保存着各个模块对象,在下次调用的时候,可以直接从该字典中,重复使用该模块对象。
当导入Python的模块的时候,第一优先导入内置的模块,第二通过sys.modules去找,最后将根据sys.path的路径的优先级情况,寻找模块。
可以简单的理解为,Python一个项目的运行中,除了主程序入口,最大的颗粒对象就是模块,剩下的函数,类,实例等等,只不过是某一个模块的属性而已。
通过模块的互相导入,可以让各个模块里的属性在不同的模块间使用。
不知道另外的程序的运行逻辑,但我感觉应该都差不多吧。