生成器

1.生成器是 python用自己的代码写的迭代器,其本质是迭代器。

2.构建生成器的两种方法

  1.生成器函数。

def num(x):
    s = x*x
    s1 = x + 1
    print(666)
    yield s
    print(777)
    yield s1
print(num(3))
num1 = num(3)
print(next(num1))
print(next(num1))

3.生成器vs迭代器

  1.自制的区别:

    

def num(x):
    s = x*x
    s1 = x + 1
    print(466)
    yield s
    print(217)
    yield s1
print(num(3))
num1 = num(3)
print(next(num1))
print(next(num1))

  

l = [1,2,3,4,5]
l1 = iter(l)

  2.内存级别的区别:

    迭代器需要对可迭代对象进行转化,可迭代对象数据量大时非常占用内存

    生成器直接转创建,不需要转化,从本质上节省内存

num1 = num(100000000000)
for a in range(1,101):
    print(next(num1))
for a in range(1,101):
    print(next(num1))

4.send 与next

  send 与next 一样都是生成器取值(执行一个yield)的方法

  send可以给上一个yield传值

  第一次取值永远都是next

  send取不到最后一个yield值

def fun():
    count = yield 1
    print(count)

    count1 = yield 11
    print(count1)
    yield 111
g = fun()
next(g)
# g.send('45')
g.send('2')
g.send('22')

5.列表推导式,一行代码基本能满足生成常用的列表

  一行解决,非常方便

  不容易排错,循环次数不能超过三次

  复杂的列表,不能用列表推导式生成不要勉强使用

l = (i for i in range(100) if i % 2 == 0)
print(l)

  

 

  

  

posted @ 2018-08-20 19:43  俏如來  阅读(91)  评论(0编辑  收藏  举报