Python anext() 函数



Python anext() 函数是一种异步迭代器方法,它允许我们从异步迭代器中检索下一项。在这里,术语 asynchronous iterator 被定义为实现 __aiter__() 和 __anext__() 方法的对象。anext() 函数是在版本 3.10 中作为异步编程功能引入的。

在同步迭代中,程序会阻止或等待每个操作完成,然后再继续下一个操作。但是,对于本质上是异步的 anext() 函数,允许程序启动另一个操作,而无需等待前一个操作完成。

语法

以下是 Python anext() 函数的语法 -


awaitable anext(asyncIterator)
or
awaitable anext(asyncIterator, default)

参数

Python anext() 函数接受一个或两个参数 -

  • asyncIterator − 它表示一个异步的可迭代对象。
  • default − 它表示默认值。

返回值

Python anext() 函数返回来自指定异步迭代器的下一个元素。

例子

让我们通过一些示例来了解 anext() 函数是如何工作的 -

示例 1

以下示例显示了 Python anext() 函数的用法。在这里,我们将创建一个异步空列表对象,并尝试使用 anext() 函数打印它的第一个元素。由于列表为空,因此将显示默认值。


import asyncio
class AsyncIterator:
	 	def __init__(self, data):
	 	 	 self.data = data
	 	 	 self.index = 0

	 	def __aiter__(self):
	 	 	 return self

	 	async def __anext__(self):
	 	 	 if self.index == len(self.data):
	 	 	 	 	raise StopAsyncIteration
	 	 	 value = self.data[self.index]
	 	 	 return value

async def main():
	 	async_iter = AsyncIterator([])
	 	first_even = await anext(async_iter, None)
	 	print("The first element of the list:", first_even)
	 	 	 		
asyncio.run(main())

当我们运行上述程序时,它会产生以下结果——

The first element of the list: None

示例 2

在下面的代码中,我们将使用 anext() 函数打印指定数字范围中的第一个元素。


import asyncio
async def async_gen_example():
	 	async def async_gen():
	 	 	 for i in range(1, 3):
	 	 	 	 	yield i
	 	gen = async_gen()
	 	first_item = await anext(gen)
	 	print("The first element is:", first_item)

if __name__ == "__main__":
	 	asyncio.run(async_gen_example())

以下是上述代码的输出 -

The first element of the list: None

示例 3

下面的代码演示了如何借助 Python 中的 anext() 函数从指定范围内找到第一个偶数。首先,将创建一个异步方法来查找前 10 个偶数。然后,我们调用 anext() 函数来打印结果。


import asyncio
async def async_gen_example():
	 	async def even_async_gen():
	 	 	 i = 1
	 	 	 num = 0
	 	 	 while num < 10:
	 	 	 	 	if i % 2 == 0:
	 	 	 	 	 	 num += 1
	 	 	 	 	 	 yield i
	 	 	 	 	i += 1
	 	 	 	
	 	gen = even_async_gen()
	 	first_even = await anext(gen, None)
	 	print("The first even number:", first_even)

if __name__ == "__main__":
	 	asyncio.run(async_gen_example())

上述代码的输出如下 -

The first even number: 2