Python aiter() 函式



Python aiter() 函式 是一個內建函式,在 3.10 版本中作為非同步程式設計特性引入。它為非同步可迭代物件返回一個非同步迭代器。非同步迭代器的定義是實現了 __aiter__()__anext__() 方法的物件。

在同步迭代中,程式會阻塞或等待每個操作完成,然後再繼續執行下一個操作。但是,對於本質上是非同步的 aiter() 函式,程式可以在不等待先前操作完成的情況下啟動另一個操作。

語法

以下是 Python aiter() 函式的語法:

aiter(asyncIterable)

引數

Python aiter() 函式接受一個引數:

  • asyncIterable - 表示一個非同步可迭代物件。

返回值

Python aiter() 函式返回一個非同步迭代器。

示例

以下示例將幫助我們瞭解 aiter() 函式的工作原理:

示例 1

在下面的示例中,我們演示了 Python aiter() 函式的基本用法。這裡我們建立了一個非同步生成器函式。它生成從 0 到 3 的數字,每個數字之間延遲 2 秒。

import asyncio
async def async_iter():
   for num in range(4):
      await asyncio.sleep(2)
      yield num

async def main():
   async for res in aiter(async_iter()):
      print(res)
        
asyncio.run(main())

當我們執行上面的程式時,它會產生以下結果:

0
1
2
3

示例 2

在下面的程式碼中,我們使用 aiter() 函式生成了 4 到 8 之間的數字,沒有任何延遲。

import asyncio
async def async_gentr():
   for num in range(4, 8):
      yield num

async def main():
   async for res in aiter(async_gentr()):
      print(res)

asyncio.run(main())

以下是上述程式碼的輸出:

4
5
6
7

示例 3

下面的程式碼展示瞭如何將 aiter() 方法與 __aiter__() 和 __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]
      self.index += 1
      return value

async def main():
   async_iter = AsyncIterator([18, 19, 10, 11])
   async for value in aiter(async_iter):
      print(value)
        
asyncio.run(main())

上述程式碼的輸出如下:

18
19
10
11

示例 4

在下面的程式碼中,我們定義了 aiter() 作為非同步生成器,它從指定的迭代器中生成專案。然後,它使用 sumOfnum() 方法計算它們的總和,並列印結果。

import asyncio
async def aiter(iter):
   for item in iter:
      yield item

async def sumOfnum(iter, start=0):
   async for x in aiter(iter):
      start += x
   return start

async def main():
   numerics = [4, 12, 20, 13, 15]
   total = await sumOfnum(numerics)
   print(f"The sum of the numbers is {total}")

asyncio.run(main())

以下是上述程式碼的輸出:

The sum of the numbers is 64
python_built_in_functions.htm
廣告