Python高级特性--生成器

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

#要创建一个generator,第一种只要把一个列表生成式的[]改成(),就创建了一个generator:
L = [x*x for x in range(1,11)]
print(L)
l = (x*x for x in range(1,11))
print(l)
#[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
#<generator object <genexpr> at 0x00000133B2F035E8>
#L是一个list,而g是一个generator

斐波拉契数列

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        a, b = b, a + b
        n = n + 1
    return 'done'    

#要把fib函数变成generator,只需要把print(b)改为yield b就可以
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b                 #generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
        a, b = b, a + b
        n = n + 1
    return 'done'    

猜你喜欢

转载自www.cnblogs.com/cznczai/p/11308309.html