码迷,mamicode.com
首页 > 其他好文 > 详细

生成器与迭代器

时间:2018-04-24 00:13:58      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:有一个   +=   括号   python   odi   coding   close   一个   frame   

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

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

              只有一个__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

 

迭代器

 

生成器与迭代器

标签:有一个   +=   括号   python   odi   coding   close   一个   frame   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!