Python生成器和列表生成式

生成器:
在Python中, 这种一边循环一边计算的机制, 称为生成器:generator
列表生成式:L(list) = [x * x for x in range(10)]
生成器:    g(generator) = (x * x for x in range(10))

调用该generator时, 首先要生成一个generator对象, 然后用 next() 函数不断获得下一个返回值

斐波拉契数列函数:

def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        a , b = b, a + b
        n = n + 1
    return 'done' 
斐波拉契数列generator:
def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        yield b
        a, b = b, a + b
        n = n + 1
    return 'done'
就是定 generator 一种方法。 如果一个函数定 中包含 yield 字, 那么 个函数就不再是一个普通函数, 而是一个 generator

里, 最理解的就是generator和函数的行流程不一。 函数是行, 遇到 return 句或者最后一行函数句就返回。 而generator的函数, 在每次next() 行, 遇到 yield 句返回, 再次从上次返回的 yield 处继续执行。

杨辉三角函数:

def triangles():
    n = 1
    N = [1]
    while True:
        print(N)
        N.append(0)
        N = [N[i-1] + N[i] for i in range(len(N))]
        n = n + 1
        if n >10:
            break

结果:

>>>>triangles()
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

杨辉三角generator函数:

def triangles():  
 p = [1]  
    while True:  
        yield p  
        p = [1] + [p[i] + p[i+1] for i in range(len(p)-1)] + [1]  




猜你喜欢

转载自blog.csdn.net/qq_30507163/article/details/80663163
今日推荐