Python Queue 模块2024 年 8 月 29 日 | 14 分钟阅读 我们都听说过 Python 中的数据结构,以及它们如何帮助我们进行编程和开发工作。简单来说,我们可以说数据结构是一种在设备或系统中组织数据的特定方式,以便以后有效地使用它。因此,数据结构在进行编程和开发相关工作时对我们来说非常重要。而且,如果我们要使用数据结构,我们必须首先理解数据结构的概念以及它们的工作原理。还应该注意的是,所有存在的数据结构都不是相同的,它们可以是不同类型的。因此,如果我们正在使用两个、三个或更多数据结构,它们可能都是不同类型的。这些不同类型的数据结构以不同的格式排列数据,这有助于我们处理不同类型的数据。我们可以根据我们的方便和我们正在使用的系统,实现这些不同类型的数据结构来排列不同的数据类型。我们可以以多种形式排列数据,例如线性形式的数据结构等。我们在编程和开发中学习的线性数据结构最常见的例子是堆栈和队列。这是我们用于以线性形式排列数据的两种最著名的线性数据结构。可以说,堆栈和队列都是线性数据结构,但实际上,它们在数据插入或移除的方式上遵循不同的方法。这种从给定数据结构中插入和移除数据的方法使堆栈和队列彼此不同。 有许多方法、程序、库和包可以用于处理这些线性数据结构。许多编程语言有不同的方法来处理这些数据结构以排列数据,但这些数据结构的基本方法在不同的方法中是相同的。如果我们专门只谈论 Python,它也是最强大的编程语言之一,它为我们提供了多个包和模块,我们可以在 Python 程序中使用它们来处理这两种类型的数据结构。我们可以使用 Python 的内置或基于模块的函数在程序中处理给定数据。队列模块就是这样一种 Python 模块,我们可以用它在程序中实现堆栈和队列数据结构方法。Python 的队列模块通过提供许多有用的函数,帮助我们在 Python 程序中使用队列和堆栈数据结构方法。因此,我们将在本教程中学习这个 Python 队列模块,并使用它来学习如何使用这个模块的函数来使用队列和堆栈数据结构方法。 Python 队列模块简介Python 以一个名为队列模块的包或模块的形式为我们提供了队列类函数。队列是一个 Python 模块,它为我们提供了多个内置函数,我们可以在 Python 程序中使用它们来执行队列和堆栈数据结构操作。我们可以通过简单地在给定的 Python 程序中导入队列模块来访问或使用 Python 队列模块的所有这些函数。我们可以使用队列模块的所有这些函数来执行与队列或堆栈数据结构相关的多个操作。我们还可以以 FIFO(先进先出)或 LIFO(后进先出)的方式在数据结构中存储元素并将其取出。 Python 的这些队列数据结构函数最初是作为许多其他面向对象编程语言(如 C、C++、C# 或 Java)的类函数创建的,但后来这些函数也以模块的形式引入了 Python。创建这个队列类模块是为了让所有人都可以在 Python 中使用这个模块的函数来处理队列数据结构。因此,理解这个模块以及如何在 Python 程序中使用这个模块的函数来处理队列和堆栈数据结构对我们来说非常重要。我们将通过创建队列和堆栈数据结构对象,然后插入和取出这些数据结构中的元素来理解这个模块的实现。 Python 队列模块:安装在 Python 的最新版本中,队列模块作为内置模块提供,这意味着该模块随 Python 的安装一起预装。因此,如果我们在使用 Python 的最新版本,我们无需执行任何安装过程来安装此队列模块,我们可以直接开始使用此模块。我们在本教程中使用最新版本的 Python,因此,我们不会执行此模块的任何安装过程,而是直接开始使用此模块的函数来理解它们的工作原理。我们只需使用以下 import 语句即可在给定的 Python 程序中使用队列模块的函数 因此,我们可以直接进入此模块的实现部分,并理解此模块函数的实现。 Python 队列模块:实现我们将通过在本部分的示例程序中使用队列模块的函数来理解其实现和工作原理。我们将使用此模块的函数执行多个操作,但为了方便理解其实现部分,我们将它们分为以下三类:
现在,我们将在每个类别下使用一个示例程序来理解此模块不同函数的工作原理和功能。我们将在每个类别下使用队列模块的不同函数执行多个操作。 查看以下按类别划分的队列模块操作实现 1) 创建 FIFO 模式的队列在此类别中,我们将执行与使用队列模块的函数创建 FIFO 队列相关的以下三种类型的函数 a) 创建队列对象: 如果我们想使用队列模块函数创建 FIFO 队列,我们可以使用此模块的 Queue() 函数。以下是使用此模块的 Queue() 函数在示例程序中创建 FIFO 队列对象的语法 如我们所见,队列模块的 queue() 函数只接受一个参数,即队列的最大大小。这是此函数的强制参数,以便创建的队列对象具有固定大小。如果我们在此函数中提供“0”或不提供任何参数,该函数将创建一个无限大小的队列对象。 (b) 将元素放入队列中: 在创建队列对象(表示队列数据结构)之后,我们可以执行的下一个操作是将元素插入队列对象中。队列模块为我们提供了 put() 函数,我们可以使用它将元素放入程序中创建的队列对象中。以下是使用队列模块的 put() 函数将元素插入队列对象的语法 如我们所见,队列模块的 put() 函数也只接受一个参数,该参数是我们希望插入队列对象的元素。 (c) 从队列中获取元素: 在此类别中,我们还将执行从队列对象获取元素的操作。我们将使用队列模块的 get() 函数以 FIFO 方式从已创建的队列中获取元素,但我们也应该注意,此函数在获取结果中的元素的同时,还会从队列中移除该元素。以下是此队列模块的 get() 函数在示例程序中的使用语法 如我们所见,队列模块的 get() 函数不接受任何强制参数,并以 FIFO 模式从队列对象返回元素。 为了理解上述所有三项操作的实现,我们将在一个示例程序中使用这些函数。请看下面的示例程序,以理解我们使用队列模块的函数可以进行的这些操作的实现。 示例 1: 请看下面的 Python 程序,其中我们创建并使用了队列对象 输出 The first element inserted in the queue object created: 6 The second element inserted in the queue object: 31 The third element inserted in the queue object: 26 The fourth element inserted in the queue object: 18 The fifth element inserted in the queue object: 24 如我们所见,队列对象中的元素按照它们插入队列对象的顺序在输出中打印。这就是我们如何使用队列模块的这三个函数来创建队列对象并在 Python 程序中使用它。 解释: 首先,我们在上述示例程序中将 Python 的内置队列模块导入为“qu”,以便我们可以访问和使用此模块的函数。之后,我们使用 Queue() 模块创建了一个名为“queueObject”的队列对象,我们可以从该队列对象中插入和移除元素。我们将队列的最大大小定义为 6,这意味着此队列对象只能容纳 6 个元素。之后,我们使用 put() 函数将元素插入我们创建的队列对象中。最后,我们使用 get() 函数以 FIFO 模式在输出中获取队列对象的元素。在从队列对象获取元素的同时,get() 函数还会从队列对象中移除元素。 2) 理解溢出和下溢在此实现类别中,我们将理解与 Python 中队列数据结构相关的溢出和下溢术语。顾名思义,溢出术语指的是队列对象已满,我们仍在尝试向队列中插入一个元素的情况。而下溢术语指的是队列对象为空,我们仍在尝试从中移除一个元素的情况。在这两种情况下,输出中都会显示错误,因此,在获取和插入元素到给定队列对象时,我们必须小心。除了这些操作之外,我们还将学习如何在输出中获取队列对象的最大大小。为了理解所有这些操作,我们将在一个示例程序中使用队列模块的函数。 请看下面的示例程序,以理解我们使用队列模块的函数可以进行的这些操作的实现 示例 2: 请看下面的 Python 程序,其中我们检查了队列对象的下溢和溢出条件 输出 Is the given queue object is full according to the maximum size of it?: False The maximum size of the created queue object is: 5 Is the given queue object is now full as its maximum size?: True The first element inserted in the queue object created: 6 The second element inserted in the queue object: 31 The third element inserted in the queue object: 26 Is the given queue object is empty?: False The fourth element inserted in the queue object: 18 The fifth element inserted in the queue object: 24 Is the given queue object is empty now?: True 如我们所见,我们已经检查了程序中创建的队列对象的下溢和溢出条件,以便在程序执行期间不会遇到任何错误。这就是我们如何使用队列模块的这些函数在 Python 程序中处理队列数据结构而不会出现任何错误。 解释: 在程序中导入队列模块为“qu”后,我们创建了一个最大大小为 5 的队列对象。之后,我们向队列对象中添加了三个元素,并使用 full() 函数验证队列对象是否已满。这将有助于我们防止溢出条件。之后,我们使用 put() 函数向队列对象中又添加了两个元素,并再次检查队列对象是否已满。然后,我们使用队列模块的 size() 函数打印队列对象的最大大小。size() 函数将返回队列对象中存在的元素总数。之后,我们使用 get() 函数从队列中移除元素并将其打印到输出中。我们还使用队列类的 empty() 函数检查队列对象是否为空。此函数有助于我们检查并防止下溢条件。 3) 使用堆栈数据结构到目前为止,我们已经使用了基于 FIFO 模式的队列数据结构,但现在我们将使用遵循 LIFO(后进先出)模式存储元素的队列数据结构。LIFO 模式的队列数据结构通常被称为堆栈数据结构。堆栈数据结构的所有内容都与我们在 FIFO 队列数据结构中使用的相同。首先,我们必须使用队列模块的 lifoqueue() 函数创建一个堆栈对象(LIFO 队列对象)。 以下是使用队列模块的 lifoqueue() 函数定义堆栈数据结构对象的语法 我们在程序中使用 LifoQueue() 函数,并在函数内部带有一个参数。此函数的工作方式与我们用于定义队列数据结构的 Queue() 函数非常相似。我们需要在此函数内部提供的参数是堆栈数据结构对象的最大大小。而且,如果我们不定义数据结构对象的大小或将其设置为“0”,那么程序将定义一个无限大小的堆栈数据结构对象。 我们将以与 FIFO 数据结构相同的方式使用堆栈数据结构,使用队列模块的函数。在示例程序中使用此模块的函数,我们将对堆栈数据结构对象执行所有对 FIFO 队列对象执行过的操作。我们还将使用队列模块的相同函数检查堆栈对象的溢出和下溢条件。请看下面的示例程序,以理解与堆栈数据结构对象相关的函数。 示例 3: 请看下面的 Python 程序,其中我们对堆栈数据结构执行了所有队列对象操作 输出 Is the given queue object is full according to the maximum size of it?: False Is the given stack object is now full according to its maximum size?: True The maximum size of the stack object created in the program is: 8 The last element inserted in the stack object: 24 The last-second element inserted in the stack object: 18 The sixth element inserted in the stack object: 26 The fifth element inserted in the stack object: 31 Is the given stack object have become empty?: False The fourth element inserted in the stack object: 6 The third element inserted in the stack object: 23 The second element inserted in the stack object: 5 The first element inserted in the stack object created: 12 Is the given stack object in the program is empty now?: True 如我们所见,我们对队列对象执行的所有操作都成功地在堆栈对象上执行了,这在上面给出的示例程序中也有体现。我们使用在示例 1 和 2 中使用的相同函数执行了所有这些操作。这就是我们如何在 Python 程序中使用模块类队列的函数来处理队列和堆栈数据结构。 下一个主题Python YAML 解析器 |
我们请求您订阅我们的新闻通讯以获取最新更新。