python 迭代器和惰性计算、函数式编程基础
本文介绍了python 的生成器,构造一些有趣的惰性计算程序,可以作为python函数式的基础。
1. iterator and generator 众所周知,python3里面的range返回是一个对象而不是列表,它的前身是python 2的xrange。python 2里面的range会生成一个列表,当这个列表很大时,会有严重的性能问题:
for x in range(0,100000): print(x) 可以使用iter(range(0,100000))将range对象转换为可迭代实例(iterator),下面的代码是和上面代码等价的:
lst=iter(range(0,10)) while True: try: b = next(lst) # 调用lst.__next__() print(b) except StopIteration: break 显而易见,其实python的for循环其实是个语法糖,首先隐式将list(可迭代对象)转换为list_iterator,然后不断调用迭代器的__next__函数,直到出现StopIteration为止;下面是一个迭代器的实例(注意内部函数__next__):
class fibonacci: '''To use this class like this for n in fibonacci(100): print(n, end=',') ''' def __init__(self, max): self.max = max #可迭代对象实现了__iter__方法,str、list、set、dict、file、sockets等容器都有这个内部函数 def __iter__(self): self.……