python基础(十六、变量进阶 - 迭代器、生成器)

15.变量进阶
5)迭代器__iter__
(1)对int类型数据进行迭代遍历会报错

(2)dir()函数辨别可迭代变量
dir()函数可以查看变量或数据类型支持的操作,包含“iter”方法的变量或数据类型是可以迭代的

可以使用成员变量in判断是否包含“iter”:

可以迭代的数据类型:str、list、dict、tuple、set、open(文件)
不可迭代数据类型:int、bool、float

(3) “iter”方法就是迭代器

list.__iter__的数据类型是列表迭代器,类似的数据类型还有字符串迭代器,字典迭代器等
迭代器也支持“iter”方法,说明迭代器本身也是可迭代的
迭代器包含“iter”和“next”方法

(4)迭代遍历迭代器,可以获取列表中的数据

(5)从迭代器获取数据的方法:next

数据取完后,再调用__next__,会报错

数据取完后,想要再次获取数据,需要重新获取迭代器

(6)for循环的工作原理:
for循环内部使用的是迭代器

(7)判定迭代器和可迭代对象Iterator、Iterable
①通过dir()查看变量的操作,包含“iter”方法的变量可迭代,包含“iter”和“next”方法的变量是迭代器

②官方判定方法Iterator、Iterable

判断是否可迭代,区分处理

(8)小结
迭代器的作用:让不同的数据类型有相同的遍历方式。
迭代器的特点:
①省内存
②只能向前,不能重复
③惰性机制,必须调用next才能继续执行

6)生成器
生成器的本质就是迭代器。
生成器的作用是节省内存。
(1)生成器的引入

生成器可以帮助我们每次只拿一个数据,不用一次取出所有数据。

(2)生成器函数的语法:
def func():
yield
func():创建一个生成器对象
生成器函数执行的时候,不会立即把函数全部执行完,会返回一个生成器。

(3)生成器的本质就是迭代器

生成器的本质就是迭代器,需要调用__next__()方法,让生成器执行一次,执行到yield

(4)yield可以提供返回值

①程序再次调用__next__方法,程序继续运行到下一个yield。
yield可以让函数分段执行

②执行__next__方法时,如果没有找到yield程序会报错

应用:

(5)send()方法
next()只能接收数据
send()可以接收数据,还能给生成器传递消息

posted on 2020-11-30 17:33  叮当2000  阅读(134)  评论(0编辑  收藏  举报