生成器列表推导式生成器表达式

Posted banjh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成器列表推导式生成器表达式相关的知识,希望对你有一定的参考价值。

知识要点:
1、生成器
定义:就是自己用Python代码写的迭代器,生成器的本质就是迭代器。
可以用以下两种方法构建一个生成器:
1、通过生成器函数
2、生成器表达式
 
一、生成器函数:
我们之前学的一般的函数:
def fun(x):
  x+=1
  return x
fun(5)  # 函数名+()是函数的执行命令,并且接受函数的返回值。
 
生成器函数:
def fun(x):
  x+=1
  print(666)
  yield x
  x+=3
  yield alex
g=fun(5) #这个执行的结果是生成器的对象
print(g.__next__())  #每一个netx执行对应的yield上面的所有语句
print(g.__next__())   #一个next对应一个yield,写多了会报错
yield的作用:yield将值返回给:生成器对象.__next__()
 
yeild和return的不同
1、return结束函数,给函数执行者返回值
2、yield不会结束函数,一个next对应一个yield,给生成器对象.__next__()返回值。
 
生成器函数VS迭代器
区别一:自定制的区别
def fun(x): #可以制定制取得什么值
    x+=5
    yield x
    x+=3
    yield x
    x+=1
    yield x
g=fun(3)
print(g.__next__())
 
区别二:内存级别的区别
1、迭代器是需要可迭代对象进行转化。可迭代对象非常占内存。
2、生成器直接创建,不需要转化,从本质就节省内存。
def fun():
    for i in range(10000000):
        yield i
g=fun()
for j in range(50): #虽然有很多数,但是我只生成50个!
    print(g.__next__())    
send 与 next
1、send与next一样,也是对生成器取值(执行一个yield)的方法
2、send可以给上一个yield传值
3、第一次取值永远都是next,不能使用send否则报错,因为send是第一个的话它无法找到第一个
4、最后一个yield永远得不到send的值
send可以给上一个yield传值:
def fun():
    count=yield 6
    print(count)
    yield 7
    yield 8
g=fun()
next(g)
g.send(alex)
next(g)
 
最后一个yield永远得不到send的值
def fun():
    count=yield 6
    print(count)
    count1=yield 7
    print(count1)
    yield 8
g=fun()
next(g)
g.send(alex)
g.send(wusir)
二、生成器表达式,列表推导式
列表推导式:一行代码搞定你需要的任何列表
1、循环模式,变量(加工后的变量)for 变量 in iterable
l=[i for i in range(100)]
print(l)
l2 = [python{}期.format(i) for i in range(1,16)]
print(l2)
2、筛选模式,变量(加工后的变量)for 变量 in iterable if 条件
print([i for i in range(1,31) if i % 3 == 0])
print([i**2 for i in range(1,31) if i % 3 == 0])

 

列表推导式:
优点:一行解决,方便
缺点,不易排错,不能超过3次循环
列表推导式不能解决所有的列表的问题,所以不要太刻意使用
 
生成器表达式:将列表推导式的[] 换成()即可
g=(i for i in range(100000))
print(next(g))
print(next(g))
print(next(g))
或者使用for循环取出需要的那一部分的值:
g=(i for i in range(100000))
for j in range(20):
    print(next(g))
大数据使用生成器表达式
小数据使用列表生成器表达式
 
 
 
 
 
 
 
 
 

以上是关于生成器列表推导式生成器表达式的主要内容,如果未能解决你的问题,请参考以下文章

Python入门-4控制语句:10推导式创建序列-列表推导式-字典推导式-集合推导式-生成器推导式

生成器表达式 和 列表推导式

列表推导式和生成器

python函数--生成器,生成器表达式,列表推导式

推导式

列表推导式生成器表达式