Python 包详解 [Python 包概述][Python 包的创建][Python 包的导入]

您的“关注”和“点赞”,是信任,是认可,是支持,是动力…

如意见相佐,可留言。
本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新。

1 Python 包概述

包(Package)是用来管理 Python 模块(《Python 模块详解》)的命名空间的一种方式。

在日常开发中,一个大项目往往需要使用成百上千的 Python 模块,如果将这些模块都放在一起,势必 Super 难管理。
使用包将这些模块进行分类,将会便于管理;还可以有效的避免模块名重名引发的冲突。

可以这么理解,包就是一个文件夹,只不过文件夹中包含的是多个模块(.py 文件)。包的本质依然是模块,包中可以有包。

Python 包中还要添加一个 __init__.py 模块(Python 3.x 中,不是必须的),表示告诉 Python 要将该目录当做包来处理,可以是一个空模块;也可以添加一些代码,当有其它程序文件(模块)导入该包时,会自动执行该文件中的代码。注意:__init__.py 模块跟其他模块是有区别的,区别在于此模块的模块名不是 __init__,而是它所在的包名。

举例如下所示:

简单模拟了一个包和模块之间的结构图(若有雷同,纯属巧合)

audio/                          顶层包
      __init__.py               初始化 audio 包,此模块的模块名为 audio,而不是 __init__
      formats/                  文件格式转换子包
              __init__.py       
              wread.py      
              wwrite.py
              aread.py
              awrite.py
      effects/                  声音效果子包
              __init__.py
              echo.py
              surround.py
              reverse.py
      filters/                  过滤器子包
              __init__.py
              equalizer.py
              vocoder.py

2 Python 包的创建

包就是一个包含 __init__.py 文件和其他模块的文件夹。

创建包,如下步骤所示,

  • 第一:新建一个文件夹,起个名,该名就是包名。
  • 第二:在该文件夹中,创建一个 __init__.py 文件(模块)。

创建好包后,就可以添加该包需要管理的其他模块(也可以再添加包)了。

举例如下所示:

创建一个名为 demo_package 的包,结构如下所示

demo_package/				包名
		    __init__.py		__inin__.py 文件,demo_package 模块
		    module1.py		其他模块
		    module2.py
		    module3.py
		    ...
				

3 Python 包的导入

包本质上还是模块,因此导入模块的语法同样也适用于导入包。

Python 包的导入方法可归结为以下三种:

import 包名[.模块名 [as 别名]]

对以上格式说明,

  • [] 方括号括起来的部分,是可选部分,可有可无。
  • 包被导入的同时,会在该包(被导入的包)的目录下生成一个 __pycache__ 目录,目录中包含 __init__.cpython-36.pyc 文件。
  • 通过此语法格式导入包中的指定模块后,在使用该模块中的成员(变量、函数、类)时,需添加包名.模块名为前缀。
  • 如果使用 as包名.模块名起一个别名的话,就直接使用这个别名作为前缀使用该模块中的成员。
  • 直接导入指定包时,程序会自动执行该包所对应文件夹下的 __init__.py 文件中的代码。
  • 直接导入包名,并不会将包中所有模块全部导入到程序中,它的作用仅仅是导入并执行包下的 __init__.py 文件,因此,运行导入包的程序时,在执行 __init__.py 文件中代码的同时,还会抛出 AttributeError 异常(访问的对象不存在)。
  • 包的本质就是模块,导入模块时,当前程序中会包含一个和模块名同名且类型为 module 的变量,导入包也是如此。
from 包名 import 模块名 [as 别名]

对以上格式说明,

  • [] 方括号括起来的部分,是可选部分,可有可无。
  • 包被导入的同时,会在该包(被导入的包)的目录下生成一个 __pycache__ 目录,目录中包含 __init__.cpython-36.pyc 文件。
  • 使用此语法格式导入包中模块后,在使用其成员时不需要带包名前缀,但需要带模块名前缀。
  • 如果使用 as 给模块名起一个别名的话,就直接使用这个别名作为前缀使用该模块中的成员。
  • 也支持 from 包名 import *这种写法,它和 import 包名 的作用一样,都只是将该包的 __init__.py 文件导入并执行。
from 包名.模块名 import 成员名 [as 别名]

对以上格式说明

  • [] 方括号括起来的部分,是可选部分,可有可无。
  • 包被导入的同时,会在该包(被导入的包)的目录下生成一个 __pycache__ 目录,目录中包含 __init__.cpython-36.pyc 文件。
  • 此语法格式导入的成员(变量、函数、类),在使用时可以直接使用成员名(变量名、函数名、类名)调用。
  • 如果使用 as 给成员名起一个别名的话,就直接使用这个别名调用成员。

【友情链接】

微信公众号:码农阿杰

博客园

【参考资料】

Python 官网

Python 3.8.2 documentation

猜你喜欢

转载自blog.csdn.net/manongajie/article/details/106366305