# from typing import Iterable
from collections.abc import Iterable,Iterator
# 可迭代对象,判断两种方式
print (isinstance([], Iterable)) # True
print (hasattr([], "__getitem__")) # True
# 可迭代对象,支持for循环
class Student():
def __init__(self):
self._grades = list()
def __setitem__(self, index, value):
self._grades.insert(index, value)
def __getitem__(self, index):
return self._grades[index]
def __iter__(self):
return iter(self._grades) # 返回_grades的迭代器
if None:
s = Student()
s[0] = 1
s[1] = 4
print ("Student", isinstance(s, Iterable)) # True
for grade in s:
print(grade)
# 可迭代对象不一定是迭代器,迭代器一定是可迭代对象
# 迭代器节约资源,实现next方法,按需返回,没有长度限制
# 没有值则会抛出stop异常
# 迭代器只能迭代一次才有数据,可迭代对象可以重复,并每次都有数据
class MyIter():
def __init__(self):
self._grades = list()
self._cur_index = 0
def __setitem__(self, index, value):
self._grades.insert(index, value)
def __iter__(self):
return self
def __next__(self):
if self._cur_index < len(self._grades):
res = self._grades[self._cur_index]
self._cur_index += 1
return res
else:
raise StopIteration
s = MyIter()
s[0] = 1
s[1] = 2
s[2] = 3
s[3] = 4
# print(next(s))
# print(next(s))
# print(next(s))
# print(next(s))
print("MyIter", isinstance(s, Iterator))
for e in s:
print(e)
python 可迭代对象与迭代器
于 2024-06-11 23:26:42 首次发布