迭代器和生成器
Posted verena
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器和生成器相关的知识,希望对你有一定的参考价值。
迭代器:
dir() 查看数据可以执行的方法
Iterable: 在数据内部存在 __iter__() 可以被迭代的内容.
Iterator: 迭代器. 存在__iter__() 还存在__next__()
还可以引入collections 中的Iterable和Iterator
isinstance(对象, 类型) 可以判断xxx对象是否是xxx类型
isinstance(对象, 类型) 可以判断xxx对象是否是xxx类型
特征:
1. 节省内存
2. 惰性机制(只有执行__next__()才会取值)
3. 只能向前.
1. 节省内存
2. 惰性机制(只有执行__next__()才会取值)
3. 只能向前.
for循环内部使用的是迭代器
lst = [1,2,3]
it = lst.__iter__()
while 1:
try:
it.__next__()
except StopIteration:
break
lst = [1,2,3]
it = lst.__iter__()
while 1:
try:
it.__next__()
except StopIteration:
break
##################################################################################################
生成器:
1. 生成器
生成器的本质就是迭代器.
生成器由生成器函数来创建或者通过生成器表达式来创建
生成器的本质就是迭代器.
生成器由生成器函数来创建或者通过生成器表达式来创建
2. 生成器函数
生成器函数:在函数中return换成yield. 这个函数就是生成器函数
def func():
yield
生成器函数:在函数中return换成yield. 这个函数就是生成器函数
def func():
yield
gen = func() 函数并不会被执行, 而是创建一个生成器对象
取值:
gen.__next__() 下一个
gen.send() 可以给上一个yield传值, 第一次执行不能用send()
gen.__next__() 下一个
gen.send() 可以给上一个yield传值, 第一次执行不能用send()
特性:
1. 节省内存
2. 惰性机制
3. 只能向前
1. 节省内存
2. 惰性机制
3. 只能向前
3. 各种推导式
1.列表推导式: [结果 for循环 if条件]
2.字典推导式: { key: value for循环 if条件}
3.集合推导式: {key for循环 if条件}
4. 生成器表达式(笔试题)
(结果 for循环 if条件)
1.列表推导式: [结果 for循环 if条件]
2.字典推导式: { key: value for循环 if条件}
3.集合推导式: {key for循环 if条件}
4. 生成器表达式(笔试题)
(结果 for循环 if条件)
惰性机制
记录在内存中的一段代码.
记录在内存中的一段代码.
以上是关于迭代器和生成器的主要内容,如果未能解决你的问题,请参考以下文章