Python aiter() Function
The Python aiter() function is a built-in function that was introduced in version 3.10 as an asynchronous programming feature. It returns an asynchronous iterator for an asynchronous iterable object. The term asynchronous iterator is defined as an object that implements the __aiter__() and __anext__() methods.
In synchronous iteration, the program block or wait for each operation to complete before moving on to the next one. However, with aiter() function which is asynchronous in nature, the program is allowed to initiate another operation without waiting for the previous ones to finish.
Syntax
Following is the syntax of the Python aiter() function −
aiter(asyncIterable)
Parameters
The Python aiter() function accepts a single parameter −
asyncIterable − It represents an asynchronous iterable object.
Return Value
The Python aiter() function returns an asynchronous iterator.
Examples
The following examples will help us in understanding the working of aiter() function −
Example 1
In the following example, we are illustrating the basic usage of Python aiter() function. Here we are creating an asynchronous generator function. It generates numbers from 0 to 3, with a delay of 2 seconds between each number.
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())
When we run above program, it produces following result −
0 1 2 3
Example 2
In the code below, we are generating a number between the range of 4 to 8 without any delay by using the aiter() function.
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())
Following is an output of the above code −
4 5 6 7
Example 3
The code below shows how to use the aiter() method in combination with __aiter__() and __anext__() methods. Here, we are creating an asynchronous list object and then iterating over it to print its items.
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())
Output of the above code is as follows −
18 19 10 11
Example 4
In the code below, we have defined aiter() as an asynchronous generator that yields items from the specified iterable. Then, it computes their sum using sumOfnum() method, and prints the result.
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())
Following is an output of the above code −
The sum of the numbers is 64