列表生成式,迭代器,生成器

2020-03-21  本文已影响0人  潼潼夏

列表生成式

a = [i+1 for i in range(10)]
print (a)
#a=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

生成器

生成器不需要创建整个列表,节省内存;
generator保存的是算法,每次调用next(generator),就计算出generator的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出StopIteration的错误。
也可以通过for函数访问

a = (i+1 for i in range(10))
print (a)
#<generator object <genexpr> at 0x117116050>
print (next(a))
#1
for g in a:
    print (g)
#1
#2
#3
...
#10

应用:斐波那契数列

def fib(max):
    n,a,b=0,0,1
    while n<max:
        yield b
        a,b=b,b+a
        n += 1
print (fib(6))
for i in (fib(6)):
    print (i)

这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:
函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

上一篇下一篇

猜你喜欢

热点阅读