#Python 的内置函数 iter
说明:获取可迭代对象的迭代器。
#函数说明
def iter(iterable):
'''
获取可迭代对象的迭代器
:param iterable: 一个可迭代对象
:return: 参数的迭代器
'''
说明
通过调用该对象的 __iter__
方法,获取可迭代对象的迭代器。
参数
iterable
- 要获取迭代器的可迭代对象
返回值
可迭代对象的迭代器
def iter(iterable, sentinel):
'''
获取可迭代对象的迭代器
:param iterable: 一个可迭代对象
:param sentinel: 哨兵值
:return: 参数的迭代器
'''
说明
创建一个特殊迭代器,不会调用可迭代对象的 __iter__
方法。
iterable
参数必须是一个可调用对象,每次调用迭代器的 __next__
方法时,都会不带参数地调用 iterable
,并使用该返回值作为 __next__
的返回值。
如果返回值等于 sentinel
,则会产生 StopIteration
异常,用于通知迭代结束。
参数
iterable
- 要获取迭代器的可迭代对象sentinel
- 哨兵值
返回值
可迭代对象的迭代器
#示例
常规的迭代器与可迭代对象:
# 迭代器
class Iterator:
def __init__(self, stop):
self.__stop = stop
self.__current = 0
def __next__(self):
if self.__current < self.__stop:
self.__current += 1
return self.__current - 1
else:
raise StopIteration # 产生 StopIteration 异常通知迭代结束
# 可迭代对象
class Iterable:
def __init__(self, stop):
self.__iterator = Iterator(stop)
def __iter__(self):
return self.__iterator
# 创建可迭代对象
iterable = Iterable(10)
# 获取迭代器,没有哨兵值
iterator = iter(iterable)
print(iterator)
# 迭代
while (n := next(iterator, None)) != None:
print(n)
可调用的可迭代对象与哨兵值:
# 可迭代对象
class Iterable:
def __init__(self):
self.__current = 0
# 使用 __call__ 代替迭代器
def __call__(self):
self.__current += 1
return self.__current - 1
# 创建可迭代对象
iterable = Iterable()
# 获取迭代器,哨兵值为 5
iterator = iter(iterable, 5)
print(iterator)
# 迭代
while (n := next(iterator, None)) != None:
print(n)