题外话:
前几天写爬虫的时候,使用一组代理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
生成器是单迭代对象,只能迭代一遍。
待续