一、认识几个英文单词
- iterable 可迭代的 性质,python 中可迭代的对象
- iterator 迭代器,是一个对象,一次性使用,用了就消失。
- subscriptable 可下标 即某个对象在python 里面可不可以做索引如即a[0]。
二、内置函数iter()
iter() 是迭代器的意思iterator.
函数里面输入的是一个对象,输出的是一个迭代器对象。
那么iter 可以迭代的对象有哪些呢?
- 列表
>>> list_a = [1,2,3]
>>> iter_a = iter(list_a)
>>> type(list_a)
<class 'list'>
>>> type(iter_a)
<class 'list_iterator'>
>>>
- 元组
>>> turple_b = (1,2,3)
>>> iter_b = iter(turple_b)
>>> type(turple_b)
<class 'tuple'>
>>> type(iter_b)
<class 'tuple_iterator'>
>>>
- 字典
d = {
"a":1,"半斤地瓜烧":2}
iter_d = iter(d)
type(d)
<class 'dict'>
type(iter_d)
<class 'dict_keyiterator'>
- 字符串
s = "ILOVEPYTHON"
iter_s = iter(s)
type(s)
<class 'str'>
type(iter_s)
<class 'str_iterator'>
- 集合
dog = {
"二哈","柯基","田园犬"}
iter_set = iter(dog)
type(dog)
<class 'set'>
type(iter_set)
<class 'set_iterator'>
- 其他可迭代对象.
因为对象有很多的,很多都可以用来迭代的。那么如何查看这个对象能不能用来做迭代器呢?
两种方法!
法一:对一个对象后如果找到.__iter()__这个函数,那就是一个可迭代对象
object.__iter()__
并且这个函数的就是用iter(s) 得来。
s = "I love python."
iter_s1 = s.__iter__()
iter_s2 = iter(s)
# iter_s1和iter_s2是获取对象的生成器的用法是等价的
法二
对于一个对象,用内置函数isinstance()直接查看比较。
from collections import Iterable
a = []
isinstance(a,Iterable)
True
isinstance(1111111111,Iterable)
False
三、iter()的一次实用性和next()组合的用法
iterator 有区别于其他可序列化的对象,当读取了一次以后,就不再读取,读完之后,迭代器就停止迭代。
- 两种读取方式
#next(object)
#object.__next__()
s = "I love python"
iter_s = iter(s)
s1 = next(iter_s)
s2 = iter_s.__next__()
print(s1,s2)
- 迭代器不同于索引,按照顺序读取之后不能再次迭代,读取完毕后停止迭代读取。 StopIteration 异常用于标识迭代的完成。
s = "I love python"
iter_s = iter(s)
for i in range(100):
print(iter_s.__next__())
- 不可下标读取,因为它只能是循序迭代(读取),迭代(读取)就消失了,简单地说就是
阅完即焚,所以不支持像序列对象那种可以下标化来读取。
>>> s = "I love python"
>>> iter_s = iter(s)
>>> s[0]
'I'
>>> iter_s[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str_iterator' object is not subscriptable
四、生成器与关键字yield
python中,函数中有 yield 称为生成器(generator)。只能用于迭代操作,更简单点理解生成器就是一个迭代器。
def square():
for i in range(10):
yield i ** 2
kk = square()
print(kk.__next__())
print("for ----")
for i in kk:
print(i)
print(type(kk))
总结
以上就是迭代器,可迭代对象,next(),iter(),yield 关键字。的使用和区别。