一 可迭代对象Iterable
A.定义
可作用于for循环的对象叫可迭代对象
B.包括
1.集合数据类型 序列,字典,集合
2.迭代器对象
C.访问可迭代对象
1.集合数据类型使用各自的访问方法
2.迭代器对象使用迭代器对象访问的方法
D.注意
1.具有__iter()__方法的可迭代对象具有可使用iter()函数变为迭代器对象
2.数值型可迭代对象即序列、字典、集合对应的可迭代对象
二 迭代器对象Iterator
A.定义
可作用于next()函数并能不断调用的对象叫迭代 器对象
B.包括
1.iter(具有__iter__方法的对象)的返回值
2.生成器
C.访问迭代器
1.循环遍历访问
2.使用next()方法访问
next(迭代器,标志位)当连续调用时,依次返回迭代器的元素,并记录当前位置(同指针),当超出时无标志位时会报Stoplteration异常,有标志位时返回标志位。
D.注意
1.迭代器对象一定具有__next()__方法
2.迭代器指针只能前进,不能调整和后退。
3.迭代器对象可使用序列转换函数转换为序列,但只能转换未被迭代的部分
4.序列的迭代单位由所属对象中自定义迭代方式决定<__next__>
>序列迭代器(以元素为迭代单位)
>文件迭代器(以行为迭代单位),
三 生成器对象
A.定义
生成器对象是一个存储算法并能记录上次位置的对象
B.包括
1.元组生成式
2.带有yield关键字的函数
def fib():
i = 0
while True:
yield i(返回) 或 i = yield(接收)
i = i+1
......
return StopIteration报错内容
C.方法
1.发送值方法
>obj.send(x) 发送x给生成器函数
2.调用值方法
>next(obj)
>obj.send(x)
D.注意
1.在函数中每次遇到yield关键字,程序都会冻结,有两种情况
>yield用于返回值(相当于return)
若yield后有参,则函数返回该参数
>yield用于接收值(相当于一个形参)
若yield无参,则yield将拥有即send函数发送的值。若使用next()调用则yield的值为None.
2.注意
>生成器运行结束时(正常结束/遇到return结束),会抛出StopIteration错误,return的返回值会自动作为错误说明。
四 可调用对象(callable)
A.定义
实例化前,实现了__call__ 方法的对象为可调用对象
B.包括
1.所有函数
>函数发生调用行为时返回的是函数的返回值
2.所有类
类发生调用行为时返回的是类的实例
3.实现__call__方法的实例
实例发生调用行为时返回的是__call__方法的返回值
C.其它
1.判断对象是否为可调用对象 callable(obj)返回True/False
2.可调用对象的调用方式:
可使用一对括号()来实现调用 callable_obj()
callable_obj()等价于callable.__call__()
3.可调用对象和函数语法规则完全相同,包括基本概念、参数处理、返回值