码迷,mamicode.com
首页 > 其他好文 > 详细

生成器和生成器表达式

时间:2018-09-18 16:13:43      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:分析   一个   ext   int   机器   获取   推导式   ==   fun   

什么是生成器?

def func():
    print("含有yield的是生成器")
    yield 10#返回值
ret=func()#函数并不执行  而是记录代码
print(ret)#当使用到函数时 开始执行 获取到的是生成器
#生成器和迭代器类似,可以使用__next__来获取到下一个值

例如

def func():
    print("111")
    yield 222
gen=func()
ret=gen.__next__()
print(ret)

》》》111
222

列表推导式

 取1-100的奇数

lst=[i for i in range(1,101) if i%2==1]
print(lst)

对比之前的想法

lst=[]
for i in range(1,101):
    if i %2==1:
        lst.append(i)
print(lst)

[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]

字典推导式

lst1=["东北","山西","山东"]
lst2=["大乱炖","老陈醋","大饼"]
dic={lst1[i]:lst2[i] for i in range(len(lst1))}
print(dic)

一个面试题. 难度系数500000000颗星:

def add(a, b):
    return a + b
def test():
    for r_i in range(4):
      yield r_i
g = test()
for n in [2, 10]:
    g = (add(n, i) for i in g)
print(list(g))

推导过程思路主要利用生成器的特性 不调用或者执行的时候不会给值

def add(a, b):#a+b
    return a + b
def test():#0-3
    for r_i in range(4):
        yield r_i
g = test()#函数不执行,获取到的是生成器
for n in [2, 10]:#这个循环获取到列表中的两个值,(巨坑开始)
    g = (add(n, i) for i in g)
print(list(g))

把for循环拆开分析

n=2
g = (add(n, i) for i in g)#注意  这里并不执行代码  而是记录代码
n=10
g = (add(n, i) for i in g)#这里的第二个g,已经替换成n=2时的g = (add(n, i) for i in g)

n=2
g = (add(n, i) for i in g)#注意  这里并不执行代码  而是记录代码
n=10
g = (add(n, i) for i in (add(n, i) for i in g))#这里的第二个g,已经替换成n=2时的g = (add(n, i) for i in g)

def add(a, b):#a+b
    return a + b
def test():#0-3
    for r_i in range(4):
        yield r_i
g = test()#函数不执行,获取到的是生成器
n=10
g = (add(n, i) for i in (add(n, i) for i in g))
print(list(g))#函数开始执行

》》》[20, 21, 22, 23]

友情提示: 惰性机制, 不到最后不会拿值
这个题要先读一下. 然后自己分析出结果. 最后用机器跑一下.

 

生成器和生成器表达式

标签:分析   一个   ext   int   机器   获取   推导式   ==   fun   

原文地址:https://www.cnblogs.com/bigc008/p/9669001.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!