46、Python之模块和包:一切皆对象,模块和包也不例外

南宫理的日志录 2024-10-17 11:35:18
引言

在前面的文章中,我们介绍了变量、函数、类,在实际编程中,始终在贯彻的有两点:

1、在Python中一切皆对象,所以函数、类、模块、包也都是一等公民。

2、不管是基于面向过程还是面向对象,我们在实际编程中所考虑的都是怎么提高代码的复用性,以及如何更加便于扩展。

从变量,到函数,再到类,代码的服用层级是在不断提升的。从本文开始要介绍的模块和包是更高层级的代码的组织与复用形式。

本文会更加偏向于编程的思维及概念,主要内容大致如下:

1、模块化思想

2、Python中的模块和包

3、模块和包也是对象

模块化思想

其实模块化的思想由来已久,从工业革命、社会化大分工开始,就已经在应用模块化思想。

早期的工厂主、资本家,担心工人掌握全部技术,采用分工的方式,让每个工人分别负责一部分工序或者部分零件的生产,最后进行组装。如此一来,每个工人能够更加专注于特定的任务,从而提高了整体的效率。

分工合作有两个副产品,一个是生产出了可复用的模块,另一个就是模块化方法在工程中的广泛应用,当然也包括计算机科学。

每个零部件不在紧密耦合于特定机器,零件是更加高内聚和低耦合的,从而提高了复用的可能。

而所谓的模块化方法的核心就是:问题分析、模块实现、模块集成,似乎正是脱胎于社会化的分工合作。

回到我们的主题Python编程上,在编程中的模块化思想,将代码的复用,不仅仅局限于某个项目内部。设计、实现良好的模块,更可以应用于后续新的项目中,从而更大程度地提升项目的开发效率。

所以,模块和包,更关键的在于对这种复用思想的理解与践行,实际使用起来,并不复杂。

Python中的模块和包

具体到Python中,其实我们在前面的文章中,已经在反复使用模块了。Python中任何一个Python源文件(.py),都可以是一个模块,都可以作为模块来使用。

在一个Python模块中,可以定义变量、函数、类,也可以导入其他模块。

而Python中的包,可以简单理解为包含一个或者多个模块的目录/文件夹。

所以,可以这样粗糙的理解为,Python中的模块可以等同为一个Python源文件,Python中的包,可以是包含Python源文件的文件夹。

还是以打工人举个例子,这次采用模块化的思想,将围绕打工人的功能放到一个Python文件中,作为一个独立的模块;然后将使用打工人功能的代码放到另一个作为入口文件的Python文件中。

模块代码:dagongren.py

入口文件:main.py

执行结果:

执行结果中,可以看到在模块dagongren通过import导入时,其中的print()语句也被执行了,然后才是执行main.py中的语句。

执行完成后,会发现代码目录中多了一个__pycache__的目录:

这个目录,我们之前查看字节码时也简单过的,当使用import语句导入模块时,Python解释器会认为模块可能被重复使用,为了提供运行的效率,会将模块代码编译为字节码,再次使用到该模块时,直接使用编译后的字节码文件即可。

模块和包也是对象

文章中,我们一直在反复提及“Python中一切皆对象”,模块和包自然也不例外,也是Python中的对象。

我们可以通过代码来简单验证一下这个结论,直接看代码:

我们首先定义了一个文件夹package_test作为包,然后在文件夹中创建一个module_test.py文件,作为模块,模块中仅有一行代码:

print("这是在模块[module_test]中")

新的入口文件:main_2.py

目录结构如下:

执行结果如下:

从执行结果中可以得出如下结论:

1、包、自定义的模块、内置模块都是对象,是由module这个类实例化的对象。

2、Python解释器加载的所有模块都会保存在sys.modules这个字典中,key为模块名,value为对应的实例对象。

总结

本文简单介绍了模块化思想的由来,及其在更高级别的代码复用场景中的应用。在Python中模块和包,对应与Python文件及文件夹,而且,模块和包都是对象,是module类的实例化对象。

本文只是简单引入了模块和包的概念,具体的使用细节,在后面的文章中将一一补充说明。

感谢您的拨冗阅读,如果对您学习Python有所帮助,欢迎点赞、关注。

0 阅读:21

南宫理的日志录

简介:深耕IT科技,探索技术与人文的交集