python生成器函数以及生成器表达式

题外话:
前几天写爬虫的时候,使用一组代理ip,因为网站对单个ip有时间限制,所以使用这组ip突破限制,然后不停的复用这组ip,期间用到了生成器函数。

《python学习手册》中关于生成函数的解释:

生成器函数:编写为常规的def语句,但是使用yield语句一次返回一个结果,在每个结果之间挂起和继续他们的状态。

先来段代码:

>>> def a():
...     print "head"
...     for x in range(4):
...             yield x
...
>>> v = a()
>>> print v
<generator object a at 0x0000000002857AB0>
>>> v.next()
head
0
>>> v.next()
1
>>> v.next()
2
>>> v.next()
3
>>> v.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>>

send函数

>>> def b():
...     for x in range(10):
...             i = yield x
...             print i
...
>>> B = b()
>>> B.next()
0
>>> B.send(77)
77
1
>>> B.send(88)
88
2
>>> B.next()
None
3
>>> B.next()
None
4
>>>

生成器表达式,(和列表生成式不同的是,使用小括号)

>>> [x **2 for x in range(4)]
[0, 1, 4, 9]
>>> (x **2 for x in range(4))
<generator object <genexpr> at 0x0000000002857C18>
>>> t = (x**2 for x in range(4))
>>> t.next()
0
>>> t.next()
1
>>> t.next()
4
>>> t.next()
9
>>> t.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

生成器是单迭代对象,只能迭代一遍。
待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值