您的位置:首页 > 编程语言 > Python开发

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

2017-11-28 19:52 295 查看
题外话:

前几天写爬虫的时候,使用一组代理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


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

待续
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: