Python Generator初探(二)

  • 前言
  • 生成器
    • 概念
    • 实例用法
    • 生成器推导式
    • 与生成器交互
  • 生成器高级用法
  • 使用建议
  • 总结

前言

前一段时间项目上线,太忙了。今天趁着周六,继续Generator的探索之旅。上一篇,我们介绍过了迭代器的概念,很好用。使用了Generator之后,我稍微能触摸到Python的协程与同步编程的概念了。

生成器

概念

Python中提供了yield语句,在函数中使用,它可以暂停函数的执行,保存函数的状态,直到下一次调用。这种特性为很多问题提供了一个非常优雅的解决方案。

def gen():
    print("Hello, world!")
    yield 1
    yield 2
    yield 3

上面就定义了一个Generator。Generator的定义很简单,与函数的定义非常相似,只是函数体中有yield语句。我们来看看如何使用它:

for i in gen():
    print i

输出结果:
Hello, world!
1
2
3

这个是怎么做到的呢?原来通过调用gen(),我们获得了一个Generator对象。在每次循环的时候,都会调用对象的next方法,与前一篇介绍的Iterator一样。我们可以这样来试验一下:

g = gen()
print(g)

打印结果:

<generator object gen at 0x01BBF0F8>

可见我们获得了一个Generator对象,注意这是函数并没有执行!!!
下次我们调用next对象的时候,函数从头开始执行,打印出Hello, world!和1。然后暂停,等待下一次执行。

g.next()
#Hello, world!
#1

g.next()
#2

g.next()
#3

g.next()
#Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值