首页 > 其他 > 详细

生成器与迭代器

时间:2018-04-23 23:33:15      阅读:178      评论:0      收藏:0      [点我收藏+]

生成器:只有在调用的时候才会生成相应的数据

              只能逐个往后取(不能取前面的,也不能直接跳到后面)

              只有一个__next()__方法(Python3)next()(Python2)

两种实现方式

1.生成器表达式,语法看似列表推导式,只是把最外层的中括号改为小括号。

>>> a = (i for i in range(8))
>>> a
<generator object <genexpr> at 0x000001D1C9FB8A98>
>>> dir(a)
[__class__, __del__, __delattr__, __dir__, __doc__, __eq__, __format__, __ge__, __getattribute__, __gt__, __hash__, __init__, __iter__, __le__, __lt__, __name__, __ne__, __new__, __next__, __qualname__, __reduce__, __reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__, close, gi_code, gi_frame, gi_running, gi_yieldfrom, send, throw]

2.函数(通过yield关键字)

#coding=utf-8

def natural_number():
    ‘‘‘自然数‘‘‘
    n = 0
    while True:
        yield n
        n += 1

n = natural_number()
print n.next()
print n.next()
print n.next()
print n.next()
print n.next()

0
1
2
3
4
#coding=utf-8
    
def fib(x):
    # 斐波拉契数列
    n, a, b = 0, 0, 1
    while n < x:
        yield b
        a, b = b, a + b
        n += 1

f = fib(6)
print f.next()
print f.next()
print f.next()
print f.next()
print f.next()
print f.next()

1
1
2
3
5

 

迭代器

 

生成器与迭代器

原文:https://www.cnblogs.com/allenzhang-920/p/8922662.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!