迭代器协议 及 python中强大的for循环机制
一、什么是迭代器协议
迭代器协议:是指,对象必须提供一个__next__()方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代。(只能往后走,不能往前退)
协议:是一种约定。可迭代对象实现了迭代器协议,python的内部工具,如for循环、sum函数、min函数、max函数等都是遵循迭代器协议访问对象。
可迭代对象:实现了迭代器协议的对象。(如何实现?对象内部定义了一个__iter__()方法)
二、python中强大的for循环机制
1、for循环的本质是什么?
for循环的本质,其实就是遵循迭代器协议去访问对象。然后在for循环的时候去调用 可迭代对象 内部的__next__()方法。
那么,列表、元组、字符串、字典、集合、文件对象是不是可迭代对象呢?答案是:否。
他们只不过是在for循环时,调用了他们内部的__iter__()方法,把他们变成了可迭代对象。
然后for循环,再调用可迭代对象内部的__next__()方法去取值,而且for循环会捕捉StopIteration异常,以终止迭代。
# 举例:
# 定义一个列表
L = [1, 2, 3, 4, 5]
# 每次for循环一次就先把列表变为可迭代对象,然后去调用可迭代对象L里的next()方法一次,去循环取值
for i in L: # for循环相当于 L.__iter__().__next__()
print(i)
具体步骤解析如下:
(1)查看列表的内置方法:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
L = [1, 2, 3, 4, 5]