【python生成器与生成器表达式问题推导过程】

下面展示一些 内联代码片

关于生成式问题的推导过程,我们要知道一个概念,生成器,在调用的时候才会执行,在形成的时候,只会将代码形成,不会运行
def add(l, i):
    return l + i
def test():
    for i in range(4):
        yield i
g = test()
g= test()
for n in [10, 5000, 10]:
    g = (add(n, i) for i in g)

print(list(g))

def add(l, i):
	return I + i
def test():
	fori in range(3):
		yield i
g = test()
for n in [1, 5, 10]
	g = (add(n, i) for i in g)
  “”“
  第一次循环:add(1, i) for i in g
  第二次循环:add(5, i) for i in add(5, i) for i in g
  第三次循环:add(10, i) for i in add(10, i) for i in add(10, i) for i in g
  形成g生成器后得到:add(10, i) for i in add(10, i) for i in add(10, i) for i in g,只要调用:g == test(),生成器就会循环,执行得到 101112
  
  但是如果将(add(n, i) for i in g)[add(n, i) for i in g],每次都打印:
  1、第一次循环得到:add(1, i) for i in g——》 123
  2、第二次循环得到:add(5, i) for i in g——》 此时g =123,得到678
  3、第三次循环得到:add(10, i) for i in g——》 此时g =678得到161718
  ”“”
print(list(g))

1、g = test() 运行赋值,这时test函数就在 yield 前面;
2for n in [1, 5, 10]循环结束得到:add(n, i) for i in add(n, i) for i in add(n, 	i) for i in g,其中n,得到10
3、list(g)迭代调用,n==10,带入进入add(n, i) for i in add(n, i) for i in add(n, 	i) for i in g
4、第一次取值:30 :add(n, i) for i ing==20《———add(n, i) for i in g==10《———add(n, i) for i in g = 0 
5、第二次取值:31 :add(n, i) for i ing==21《———add(n, i) for i in g==11《———add(n, i) for i in g = 1 
6、第二次取值:32 :add(n, i) for i ing==22《———add(n, i) for i in g==12《———add(n, i) for i in g = 2
7、最后得到:303131
8、如果(add(n, i) for i in g)[add(n, i) for i in g],每次都取值得到:
[1, 2, 3]
[6, 7, 8]
[16, 17, 18]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值