字符串、列表、元组、字典、集合、文件打开的对象,都可以通过for... in ...遍历其中的成员
for element in [1, 2, 3]:
print(element)
for element in (1, 2, 3):
print(element)
for key in {'one':1, 'two':2}:
print(key)
for i in set(range(10)):
print(i)
for char in "123":
print(char)
# for line in open("myfile.txt"):
# print(line, end='')
iter()函数
通过for循环遍历容器对象container_object的时候,相当于 for ... in iter(container_object)
for i in iter([1,2,3,4]):
print(i)
iter()
函数返回一个迭代器对象,迭代器对象可以通过next()
函数逐个访问其中的元素
# iter()
函数返回一个迭代器对象,迭代器对象可以通过next()
函数逐个访问其中的元素
iter_object = iter([1,2,3,4])
print(iter_object)
# <list_iterator object at 0x10e504190>
# 通过next函数访问,每执行一次next函数,内部元素指针就会向后移一次
next(iter_object)
# 1
next(iter_object)
# 2
# ......
__next__内部方法
迭代器对象需要在内部提供一个__next__
方法,当执行next()函数时,就会调用__next__()
内部方法
# 迭代器对象需要在内部提供一个__next__
方法,当执行next()函数时,就会调用__next__()
内部方法
iter_object = iter([1,2,3,4])
iter_object.__next__()
# 1
iter_object.__next__()
# 2
iter_object.__next__()
# 3
迭代器异常处理
当迭代器迭代到末尾,不在有元素可以迭代时,会产生迭代异常
可以通过try ... except...
语句捕捉这个异常
# 处理迭代异常
while True:
try:
iter_object.__next__()
except StopIteration:
print("迭代结束")
break
自定义迭代器对象
举例: 定义一个对象,只迭代值为偶数的项, 需要实现两个方法,__iter__()
与__next__()
# 自定义迭代对象
# 只迭代偶数项
class MyList(list):
def __init__(self, data):
super().__init__(data)
self.index = 0
# 必须实现
def __iter__(self):
return self
# 必须实现
def __next__(self):
try:
data = self.__getitem__(self.index)
except Exception as e:
raise StopIteration("stop")
else:
self.index = self.index + 1
if data % 2 == 0:
return data
else:
return 0
mylists = MyList([1,2,3,4,5,6])
print(mylists)
for i in mylists:
print(i)
# None 2 None 4 None 6
讨论区