在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。

在Python中,一个.py文件就称之为一个模块(Module)。

使用模块有什么好处?最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。

你也许还想到,如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

举个例子,一个abc.py的文件就是一个名字叫abc的模块,一个xyz.py的文件就是一个名字叫xyz的模块。

现在,假设我们的abcxyz这两个模块名字与其他模块冲突了,于是我们可以通过包来组织模块,避免冲突。方法是选择一个顶层包名,比如mycompany,按照如下目录存放:

引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。现在,abc.py模块的名字就变成了mycompany.abc,类似的,xyz.py的模块名变成了mycompany.xyz

请注意,每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany

类似的,可以有多级目录,组成多级层次的包结构。比如如下的目录结构:

文件www.py的模块名就是mycompany.web.www,两个文件utils.py的模块名分别是mycompany.utilsmycompany.web.utils

mycompany.web也是一个模块,请指出该模块对应的.py文件。

最新文章

  1. 远程连接Oracle时出现ORA-01034 和ORA-27101 的解决办法
  2. linux基础-第十单元 系统的初始化和服务
  3. scroll、offset和client的区别
  4. 【Linux】浅谈段页式内存管理
  5. 老叶观点:MySQL开发规范之我见
  6. OpenCV2学习笔记04:图像的读取与显示
  7. Android Studio API 文档_下载与使用
  8. 每日一发linux命令
  9. 散列表的实现 -- 数据结构与算法的javascript描述 第八章
  10. spring-security3.2.5实现中国式安全管理(转)
  11. shell编程其实真的很简单(二)
  12. python 杂货铺
  13. C# 实现对PPT文档加密、解密以及重置密码的操作
  14. 学习笔记:spark Streaming的入门
  15. elastic search 重要的系统配置
  16. python使用smtplib发送邮件
  17. CSS 小结笔记之元素的隐藏与显示
  18. How to Tell Science Stories with Maps
  19. js常用点
  20. spring boot application.properties基本配置

热门文章

  1. 006.ASP.NET MVC ActionResults说明
  2. Nginx - 简易图片服务器
  3. js密码强度校验
  4. Error:Execution failed for task ':app:processAnzhiDebugAndroidTestResources'. > No slave process to process jobs, aborting
  5. Linux终端和win32控制台文本颜色输出
  6. 三、Host-Only(仅主机模式)
  7. VC++ 崩溃处理以及打印调用堆栈
  8. 用CSS隐藏页面元素的5种方法
  9. 移动端 line-height 不垂直居中问题
  10. Spark企业级应用开发和调优