python生成式和生成器

一,生成式和生成器

1,列表生成式

mylist = [ i*i  for i in range(3) if i>1 ]
print(mylist)

                    运行结果:[4]

  可以发现,快速生成列表的表达式,for循环range(3) ,如果i大于1,则乘以自己然后输出。

 

2,生成器

mygenerator = ( i*i for i in range(3))
print(mygenerator)
                运行结果:<generator object <genexpr> at 0x000001FB08F18BA0>

 可以发现,这个生成器和列表生成式非常相似。只是上面的是[] 而下面的是()。

 

这让我想起了python2中的range与xrange2个函数。range是输出的是一个列表,而xrange生成的就是一个生成器。生成器需要是用for循环取值。

生成器的好处就是可以不用一次性将值存放到内存中,用的时候再去调用,这样可以节省内存。

 

二,yield(用于创建生成器)

yield 和 return 非常相似, return只能返回一个值,而yield可以输出多个值。yield也可以理解为具有记忆功能的return。

def fun1():
    for i in range(1,5):
         print(i)   
     

def fun2():
    for i in range(1,5):
        return i 


def fun3():
     for i in range(1,5):
        yield i 

  

调用fun1()函数输出的是1,2,3,4,5

调用fun2()函数输出是1(执行到return就退出函数了)

调用fun3(0函数输出的是生成器,需要使用for循环取出来。

fun3函数和fun2函数对比,fun2函数只会返回1然后退出函数,而yield会在下次进入函数的时候知道自己已经输出过上一次的值了,所以它会return下一个值。本质上是执行next()函数(python2版本)

 

说明:yield创建的生成器是活的,再你使用for循环的时候是可以变更的。

 

转载于:https://www.cnblogs.com/lin1/p/8379697.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值