一、 引言

《第10.2节 Python的模块及模块导入》介绍了模块的概念及导入的几个关键点,Python中的模块是一个单个的py文件,当我们开发的项目或功能集由多个文件构成时,我们需要将这些文件打包,这样在外部引用时这些功能集的功能时,这些文件作为一个整体来进行管理。

二、 概念

在Python中,一个包可以说是一个带特定信息的目录结构:

1、 一个包对应一个目录,包名和目录名保持一致;

2、 包对应目录下必须有一个__init__.py文件,该文件用来标记该目录为包;

3、 __init__.py文件可以为空,也可以是一个有效的python文件,加载包时实际上就是执行__init__.py文件;

4、 要将模块加入包中,只需将模块文件放在包目录中即可,一个包目录可以存放多个模块文件;

5、 包的组织结构中还可以套包,即包可以嵌套,也就是包目录下还可以有子包目录;

6、 从逻辑上看,包的本质是模块的集合,是多个模块依靠目录结构组织在一起形成功能集合对外提供能力输出;

7、 导入包的本质就是加载井执行该包下的__init__.py文件,然后将整个文件内容赋值给与包同名的变量,该变量的类型是 module;

8、 与模块类似,包被导入后会在包目录下生成一个__pycache__子目录,并在该目录内为包生成一个 __init__.cpython-37.pyc 文件。

三、 init.py文件的使用

  1. Python对于定义目录为包的__init__.py文件没有强制要求,只要是一个符合Python代码源文件的文件即可,甚至是一个空文件也可以;
  2. 包的主要作用是组织多个模块或子包提供功能集,而导入包就相当于导入该包下的 __init__.py 文件,因此实际使用时是将包的__init__.py 文件的用于导入该包内包含的模块,而不是用来定义程序单元;
  3. 通过导入包时自动导入包内模块,可把模块中的成员导入变成包内成员这样通过导入包就完成了包内模块的导入,对于调用者来说,只要完成包导入就可以了,不用关注包内的每个模块,通过包就可以访问包内每个模块或子包提供的功能,以后使用起来会更加方便;
  4. 当然也可以导入包时不自动导入包内所有模块,而让调用方自行导入包内的模块,这样调用方仅需导入包内调用方需要使用的模块,可以节省系统开销。

本节老猿介绍了Python中包的概念,可以看到Python包是一种非常灵活的功能集模块文件管理机制,在开发者需要对外提供能力集合时使用非常方便。

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


请大家多多支持,点赞、评论和加关注!谢谢!

第10.6节 Python包的概念的更多相关文章

  1. 第10.8节 Python包的导入方式详解

    一. 包导入与模块导入的关系 由于包本质上是模块,其实对模块的许多导入方法都适用于包,但由于包的结构与模块有差异,所以二者还是有些区别的: 对包的导入,实际上就是包目录下的__init__.py文件的 ...

  2. 第10.7节 Python包和子包的定义步骤

    一. 包的定义步骤 按照包名创建或使用一个已有目录,目录名就是包名,必须注意包的目录必须位于Python加载模块的搜索路径中(具体请参考<第10.1节 Python的模块及模块导入>关于模 ...

  3. 第10.9节 Python子包的导入方式介绍

    在<第10.8节 Python包的导入方式详解>详细介绍了包的导入方式,子包也是包,子包的导入与包的导入方法上没有本质区别,但二者还是有所不同.本节对照二者的方式介绍子包与包导入的关系: ...

  4. python 包的概念

    包的概念 包的概念: 在python中包即使模块,是一系列功能的集合体, 为什么要用包? 提高开发效率 如何用包 import ... from ... import ..... 如何认识它就是一包 ...

  5. 第10.3节 Python导入模块能否取消导入?

    模块导入后,是否可以取消导入?实际上当模块导入后,是无法逆向还原到导入前的状态的,但是可以利用"del 模块名"进行导入模块的删除,此时的删除只是删除了导入模块对应的模块变量名,删 ...

  6. 第10.4节 Python模块的弱封装机制

    一. 引言 Python模块可以为调用者提供模块内成员的访问和调用,但某些情况下, 因为某些成员可能有特殊访问规则等原因,并不适合将模块内所有成员都提供给调用者访问,此时模块可以类似类的封装机制类似的 ...

  7. 第10.11节 Python模块和包小结

    Python的模块就是一个独立的Python文件,Python的包是一些功能相关的Python文件放到一个目录下进行统一管理的文件管理结构,包本质上是模块,加载包就是加载包下特定的模块文件__init ...

  8. day3-Python集合、函数、文件操作,python包的概念

    本节大纲: 1 python程序由包(package).模块(module)和函数组成.包是由一系列模块组成的集合.模块是处理某一类问题的函数和类的集合. 2 包就是一个完成特定任务的工具箱. 3 包 ...

  9. 第10.1节 Python的模块及模块导入

    一. 什么是模块 Python中的模块即单个的Python代码文件,为什么称为模块呢?这是因为在Python中,每个独立的Python文件都可以作为被其他代码导入的模块使用,导入的模块有自己的名字空间 ...

随机推荐

  1. 我叫Mongo,干了「查询终结篇」,值得您拥有

    这是mongo第三篇"查终结篇",后续会连续更新5篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流. 通 ...

  2. Pytest学习(七) - skip、skipif的使用

    前言 作为一个java党,我还是觉得pytest和testng很像,有时候真的会感觉到代码语言在某种程度上是相通的,那么今天来说说这两个知识点. skip和skipif,见名知意,就是跳过测试呗,直白 ...

  3. Flask补充内容

    关键字: 一,过滤器 二,增删改查 一,过滤器 1,概念:过滤器的本质就是函数.有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化.运算等等,而在模板中是不能直接调用 Pyth ...

  4. Why use MSIX message signal interrupt

    处理一个低版本内核中断向量表不够问题:__assign_irq_vector 关联irq 和 vector失败问题: (bug还没解决先记录一下吧) 同时先学习一下MSI-X:MSI, message ...

  5. spring中的数据库操作类

    例子一: package cn.itcast.service.impl; import java.util.List; import javax.sql.DataSource; import org. ...

  6. mysql调优从书写sql开始

    理论知识 MySQL 的运行机制 Mysql 的SQL关键字执行顺序 1.MySQL 的优化方案有哪些? MySQL 数据库常见的优化手段分为三个层面:SQL 和索引优化.数据库结构优化.系统硬件优化 ...

  7. rgw实现nfs的首测

    功能介绍 关于rgw实现nfs接口这个,刚接触的人可能并不清楚这个是个什么样的服务架构,rgw是ceph里面的对象存储接口,而nfs则是纯正的网络文件系统接口,这二者如何结合在一起,关于这个,有几个相 ...

  8. 删除ceph集群mds

    ceph集群新搭建以后是只有一个默认的存储池rbd的池 ## 创建文件接口集群 1.创建一个元数据池 [root@mytest ~]# ceph osd pool create metadata 20 ...

  9. CVE-2020-1938复现

    一.漏洞描述        Tomcat是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行.Apache Tomcat服务器存在文件包含漏洞,攻击 ...

  10. 面试官:小伙子,你给我说一下Java中什么情况会导致内存泄漏呢?

    概念 内存泄露:指程序中动态分配内存给一些临时对象,但对象不会被GC回收,它始终占用内存,被分配的对象可达但已无用.即无用对象持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间浪费. 可达 ...