python精讲之迭代器与生成器,提高编程效率,优化程序

文章目录

    • 迭代器
      • 迭代是什么
      • 迭代器是什么
      • 创建迭代器
    • 生成器
      • 列表推导式
      • 生成器是什么
      • 创建生成器
        • yield

迭代器

迭代是什么

迭代就是在一些元素中获取元素的过程
可迭代对象:生成器、列表、元组、字符串、字典…

迭代器是什么

迭代器是一个可以记住遍历位置的对象,迭代器对象从序列中的一个元素开始访问,直到所有的元素被访问结束,而且只能往前不能往后
可以被next()函数调用并不断返回下一个值的对象我们称之为迭代器 Iterator

创建迭代器

使用iter函数可以让一个序列转换为一个迭代器

lit = [1,2,3,4]
lit = iter(lit)
print(next(lit))
print(next(lit))
1
2

生成器

列表推导式

旧的列表–》新的列表
通过旧的列表推出新的列表就是列表推导式
语法:

[表达式 for 变量 in 旧列表]
[表达式 for 变量 in 旧列表 if 条件]

例如:

#找出0-20之间能被3整除的数
lit = [x for x in range(20) if x%3 == 0]
print(lit)

生成器是什么

在python中有一种一边循环一边计算的机制,称之为生成器

创建生成器

如例:
得到一个0-20之内分别和3相乘的列表

#使用列表推导式
lit = [x*3 for x in range(20)]
print(type(lit))
#使用生成器
lit1 = (x*3 for x in range(20))
print(type(lit1))
<class 'list'>
<class 'generator'>

我们发现将列表的中括号换成元组的小括号便让列表推导式变成了生成器

但是我们打印一下结果试试:

print(lit1)
<generator object <genexpr> at 0x0000015737557F20>

欸,发现这打印结果不是我们想要的呀,因为生成器要按照需要生成结果,如何做呢
通过特殊方法获得:

print(lit1.__next__())
print(lit1.__next__())
0
3

通过next函数获得

print(next(lit1))
print(next(lit1))
print(next(lit1))
0
3
6

yield

在函数中添加yield关键字,就会变成一个生成器函数
如下:

def fn():
    n = 0
    while True:
        n += 1
        yield n
n = fn()
print(n)
print(next(n))
print(next(n))
<generator object fn at 0x000001950A5BE580>
1
2

你可能感兴趣的:(python,生成器,迭代器,python,列表,生成器,列表推导式,迭代器)