递归迭代和生成器

来源:互联网 发布:cookie统计uv存数据 编辑:程序博客网 时间:2024/05/20 18:54
1.
递归是针对函数,迭代是针对循环
2.
参考:
http://www.cnblogs.com/hustcser/p/4256177.html
生成器与迭代器的区别:
生成器就是一种迭代器。生成器拥有next方法并且行为与迭代器完全相同,这意味着生成器也可以用于Python的for循环中。
Python的for循环中,有next()调用和对StopIteration的处理,这样使得生成器和迭代器运行表象上看似相同,如下:
iterator = [i for i in range(5)]for obj in iterator:    print(obj)# 0 1 2 3 4# (i for i in range(5)) 就是一个生成器表达式generator = (i for i in range(5))for obj in generator:    print(obj)#0 1 2 3 4print(sum(x ** 3 for x in range(10) if x % 3 == 1)) # 408
当你使用一个列表生成式来建立一个列表的时候,就建立了一个可迭代的对象, 看起来除了把 [] 换成 () 外没什么不同。
但是,你不可以再次使用 for i in mygenerator , 因为生成器只能被跌代一次:先计算出0,然后继续计算1,然后计算4,一个跟一个的。
比如,下列脚本中不能够打印出True,但如果是迭代器,则可以打印出True:
mylist = [1, 4, -5, 10, -7, 2, 3, -1]pos = (n for n in mylist if n > 0)for x in pos:    print(x)for x in pos:    print('True')# 1# 4# 10# 2# 3
注意: 所有你可以使用 for .. in .. 语法的叫做一个迭代器:链表,字符串,文件... 你经常使用它们是因为你可以如你所愿的读取其中的元素,
但是你把所有的值都存储到了内存中,如果你有大量数据的话这个方式并不是你想要的。
0 0
原创粉丝点击