[1] 列表生成器: 列表生成式就是一个用来生成列表的特定语法形式的表达式.
1. 基础语句结构:[exp for iter_var in iterable 例如: a=[f(x) for x in range(10)]
2. 工作过程:
迭代 iterable 中的每个元素; 每次迭代都先把结果赋值给 iter_var, 然后通过 exp 得到一个新的计算值; 最后把所有通过 exp 得到的计算值以一个新列表的形式返回.
相当于这样的过程: L = []
- for iter_var in iterable:
- L.append(exp)
详情介绍: https://www.cnblogs.com/yyds/p/6281453.html
[3] 生成器:
1. 作用: 按照某种算法不断生成新的数据, 直到满足某一个指定的条件结束.
构造生成器的两种方式:
使用类似列表生成式的方式生成 (2*n + 1 for n in range(3, 11))
使用包含 yield 的函数来生成
生成器的执行过程:
在执行过程中, 遇到 yield 关键字就会中断执行, 下次调用则继续从上次中断的位置继续执行.
生成器的特性:
只有在调用时才会生成相应的数据
只记录当前的位置
只能 next, 不能 prev
生成器的调用
要调用生成器产生新的元素, 有两种方式:
调用内置的 next() 方法
使用循环对生成器对象进行遍历 (推荐)
调用生成器对象的 send() 方法
- # print(list(range(10)))
- # s=(x*2 for x in range(10))
- # print(s)#<generator object <genexpr> at 0x000001EBD2E2CFC0 > 生成器对象
- # for i in s:
- #
- # #print(s.__next__())
- # print(next(s),i)# 等价于 s.__next__() 取下一个元素
- # print(next(s))
- # print(next(s))
- # 生成器就是一个可迭代对象 (Iterable)
- # 生成器一共两种创建方式
- #1(x*2 for x in range(5))
- #2.yieId
- def foo():
- print('ok')
- yield 1
- print('ok2')
- yield 2
- g=foo()
- # print(g)
- # for i in foo():
- # print(i)
- # next(g)
- # next(g)
- # 什么是可迭代对象 (是否有_iter_)
- l=[1,2,3]
- l.__iter__()
- def fid(max):
- n,before,after=0,0,1
- while n<max:
- yield
- before,after=after,before+after
- n=n+1
- fid(5)
来源: http://www.bubuko.com/infodetail-2630002.html