Python——生成器

一、特点:生成器只能用于迭代操作。

二、本质:生成器 本质 还是迭代器

三、操作

1、生成函数

def generator():
    print(1)
    yield 'a'    #yield必须写到函数里,且不能与return公用

ret = generator()

print(ret.__next__())
#1
#a
print(ret.__iter__())
#迭代器的数据类型 <generator object generator at 0x0000000002743660>

2、send方法:send 的获取下一个值的效果和 next 基本一致,只不过是在获取下一个值的时候,给上一个值的位置传递一个数值

def generator():
    print(123)
    content = yield 1
    print('===',content)
    print(456)
    yield 2

g = generator()
ret = g.__next__()
print(ret)
ret = g.send('hello')
print(ret)
# 10 20 30

def average():
    sum = 0
    count = 0
    avg = 0
    while True:
        num = yield avg
        sum += num
        count += 1
        avg = sum / count


avg_g = average()
avg_g.__next__()
avg1 = avg_g.send(10)
avg1 = avg_g.send(20)
avg1 = avg_g.send(30)
print(avg1)
移动平均值

四、列表推导式

#模式一
egg_list = ['鸡蛋%s' %i for i in range(10)] #列表推导式
print(egg_list)
#模式二
egg_list = []
for i in range(10):
    egg_list.append('鸡蛋%s'%i)
print(egg_list)
#模式三 自己的平方
print ([i*i for i in range(10)])

五、生成器表达式

g = (i for i in range(10))
print(g)

for i in g :
    print(i)
    
#列表推导式 和 生成器表达式 不同
#1、括号不一样
#2、返回值不一样
#3、生成器表达式 几乎不占用内存

六、多种嵌套

#30以内素有能被3整除的数
ret = [i for i in range(30) if i%3 == 0]
print (ret)

#30以内所有被3整除的数平方
ret = [i*i  for i in range(30) if i %3 == 0 ]
print(ret)

 

posted @ 2018-12-04 15:28  澄心元素  阅读(155)  评论(0编辑  收藏  举报