python包_Python包

news/2024/11/28 6:49:34/

python包

Today we are going to learn about Python Package. Before proceeding to this tutorial you should have knowledge about Python Modules which you can find it here.

今天,我们将学习Python包。 在继续本教程之前,您应该了解有关Python模块的知识,您可以在这里找到它。

Python包 (Python Package)

Python package is a collection of modules in directories that give a package hierarchy. More elaborately, python packages are a way of structuring python’s module by using “dotted module names”. So A.B actually indicates that B is a sub module which is under a package named A.

Python软件包是目录中提供软件包层次结构的模块的集合。 更详细地说,python包是通过使用“点分模块名称”来构造python模块的一种方式。 因此,AB实际上表明B是一个子模块,位于名为A的程序包下。

So as modules are way of handling functions and namespace in a better way, in that way python package is the way of handling two or more modules in a structured method.

因此,由于模块是更好地处理函数和名称空间的方式,因此python包是在结构化方法中处理两个或多个模块的方式。

Suppose you want to design a collection of modules for handling the music files. Take a look at the following structures-

假设您要设计用于处理音乐文件的模块集合。 看一下以下结构-

music/                          Top-level package__init__.py               Initialize the music packageformats/                  Subpackage for file format conversions__init__.pywavread.pywavwrite.pyaiffread.pyaiffwrite.pyauread.pyauwrite.py...effects/                  Subpackage for sound effects__init__.pyecho.pysurround.pyreverse.py...filters/                  Subpackage for filters__init__.pyequalizer.pyvocoder.pykaraoke.py...

Every python package needs to have a __init__.py file, which will ensure that this directory will be treated as a python package. Generally __init__.py can be just an empty file or it can also be an executable initialisation code for the package or set the __all__ variable which will be explored in the later part of this tutorial.

每个python软件包都需要有一个__init__.py文件,这将确保该目录将被视为python软件包。 通常__init__.py可以是一个空文件,也可以是该程序包的可执行初始化代码,也可以设置__all__变量,这将在本教程的后面部分进行探讨。

To import individual module from the package one can use any of the following ways.

要从包中导入单个模块,可以使用以下任何一种方法。

import music.formats.wavwrite

Or,

要么,

from music.formats import wavwrite

The above commands load the sub module music.formats.wavwrite. Of course this must be referenced with it’s full name. Suppose module wavwrite.py has a functions named writeFile(aFileName) which takes name of a file as it’s argument. So to call it we have to write like this;

上面的命令将加载子模块music.formats.wavwrite 。 当然,必须使用全名进行引用。 假设模块wavwrite.py具有一个名为writeFile(aFileName)的函数,该函数以文件名作为参数。 因此,我们必须这样写:

import music.formats.wavwrite
...
...music.formats.wavwrite.writeFile(outputFileName)

Or, in the second way-

或者,第二种方式

from music.formats import wavwrite
...
...
wavwrite.writeFile(outputFileName)

Also one may wonder, there is also another variation to import the desired function or variable directly;

还可能有人想知道,还有另一种变体可以直接导入所需的函数或变量。

from music.formats.wavwrite import writeFile
...
...
writeFile(outputFileName)

我可以从Python包中导入* (Can I import * From a Python Package)

A curious reader may wonder what if one writes from music.formats import * like we did while importing from a module. Well this might cause unwanted side-effects and also this will consume a lot of time.

一个好奇的读者可能会想,如果from music.formats import *写入内容from music.formats import *就像我们从模块导入时所做的那样,该怎么from music.formats import * ? 好吧,这可能会导致不良的副作用,并且还会消耗大量时间。

Ideal solution to do this would be if the package author provide an explicit index of the package. If a package’s __init__.py code defines a list named __all__, it would be considered as the index of module names that should be imported when from music.formats import * is encountered.

这样做的理想解决方案是,如果程序包作者提供了程序包的显式索引。 如果包的__init__.py代码定义了名为__all__的列表,则将其视为遇到from music.formats import *的模块名称的索引。

Let’s see a different example to understand this concept clearly. Suppose we have a package structure like this;

让我们看一个不同的例子,以清楚地理解这个概念。 假设我们有一个这样的包结构:

Here you can see under \music there is a __init__.py. If the __all__ is defined below;

在这里,您可以在\ music下看到一个__init__.py 。 如果__all__定义如下;

__all__ = ["admin", "apps", "models"]

Then only sub modules enlisted in the above list will imported while a from music import * is encountered. The rest of the sub modules and variables will be ignored.

然后,仅遇到上述列表中列出的子模块,而遇到from music import *子模块。 其余子模块和变量将被忽略。

If __all__ is not defined, there is guarantee that all the submodules under it will be imported. The statement from music import * only ensures that music package has been imported.

如果未定义__all__ ,则可以确保将其下的所有子模块都导入。 from music import *的语句仅确保已导入音乐包。

So that’s pretty much all of the basic information about python package. For more information you can see the official python doc – https://docs.python.org/3/tutorial/modules.html#packages

因此,这几乎是有关python包的所有基本信息。 有关更多信息,请参见官方python文档– https://docs.python.org/3/tutorial/modules.html#packages

So keep practicing. #happy_coding 🙂

所以继续练习。 #happy_coding🙂

翻译自: https://www.journaldev.com/14339/python-package

python包


http://www.ppmy.cn/news/141155.html

相关文章

Pytorch入门(三)深度学习模型的训练的基本步骤

文章目录 一、修改现有的网络模型二、模型的保存三、模型的加载四、模型的评估五、训练模型的完整套路六、使用GPU加速模型的训练七、模型训练完整的验证套路 一、修改现有的网络模型 import torchvision from torch import nn # pretrained 为True时会自动下载模型所对应的权…

为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,java引入包(package)机制, 提供类的多重类命名空间。 package语句作为java源文件的第一条语句,指明该文件中定义的类所在的包。若缺省&#x…

最佳Android系统 | 运行在台式机、笔记本手提电脑的安卓Android系统

最佳Android系统 | 运行在台式机、笔记本手提电脑的安卓Android系统 适用于PC 2019的最佳Android操作系统 2022年2月1日 团队技术探索 Android 您是否知道,即使有几个升级版本,如Windows 10和10.1,即使这样,Android应用程序也在…

背包相关

ACM模版 背包相关 const int MAXN 101; const int SIZE 50001;int dp[SIZE]; int volume[MAXN], value[MAXN], c[MAXN]; int n, v; // 总物品数,背包容量// 01背包 void ZeroOnepark(int val, int vol) {for (int j v ; j > vol; j--){dp[j] m…

【背包】

首先说下动态规划,动态规划这东西就和递归一样,只能找局部关系,若想全部列出来,是很难的,比如汉诺塔。你可以说先把除最后一层的其他所有层都移动到2,再把最后一层移动到3,最后再把其余的从2移动…

计算机投诉信英语作文,英文投诉信:手提电脑毛病

英文投诉信:手提电脑毛病(prepared by: alexcwlin; edited by: Adam Lam) Alex Lin (Address) (Phone #) (email address) July 3, 20XX Customer Service Best Buy Canada Ltd. Consumer Relations Dept. (Address) Dear Sirs/Madams: Re: Alex Lin Reward Program…

台式计算机mtbf认证,手提电脑MTBF认证

手提电脑MTBF认证 随着科技的逐渐发展,从原来的大机器计算机主导到现在的台式电脑,手提电脑。无论是台式电脑还是手提电脑都是为了让人们在使用的时候更加方便,所以把所有能够完成工作的硬件尽可能减少。商务人士会更加偏向于笔记本便携式计算…

手提电脑notebook

戴尔 Inspiron 6000(P-M 730)为用户预装Windows XP简体中文家庭版SP2,最新售价:11698元,在Inspiron 6000系列支持Sonoma迅驰的机型中这款售价最为便宜,对此感兴趣的朋友可以到DELL官方网站或者拨打800-858-2303电话咨询定购。