zoukankan      html  css  js  c++  java
  • 第10.6节 Python包的概念

    一、 引言
    《第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

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

  • 相关阅读:
    Java的final关键字
    递归
    打开Eclipse时出现"The Eclipse executable launcher was unable to locate its companion shared library"情况的解决
    warning: LF will be replaced by CRLF in test.txt.
    Java类的初始化问题
    递归输入与引用传值(UVa839 Not so Mobile)
    UVa1599 Ideal Path(双向bfs+字典序+非简单图的最短路+队列判重)
    欧拉图和欧拉圈-Play On Words(UVa10129)
    UVA12096 集合栈计算机(map和vector实现双射关系+集合的交并运算的STL)
    WebStorm快捷键
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/13643654.html
Copyright © 2011-2022 走看看