zoukankan      html  css  js  c++  java
  • 3.4、生成器

     g=(x*x for x in range(0.10))  generator生成器

    next(g)通过next()查看,或者通过循环语句:for n in g:

    def fib(max):
        a, b = 0, 1
        for n in range(max):
            print(b)
            a, b = b, a + b
        return 'done'

    def fib(max):
        a, b = 0, 1
        for n in range(max):
            yield b
            a, b = b, a + b
    m=fib(6)
    for x in m:
        print(x)

    print(b)改成yield b 即可将函数变成生成器

    函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

    def f(n):
        t=[]
        s=[1,1]
        for i in range(n):
            t.append(1)   
            if i>1:
                for j in range(1,i):
                    t[j]=s[j]+s[j-1]
                s=t
            yield t
    
    m=f(5)
    for k in m:
        print(k)

    错误原因:s=t,t是一个动态变量,每次执行for循环,s都会跟随t变化,导致后面for循环结果不对

     直接采用 ’ = ’ 赋值方式会使得两个变量占用同一地址,也就是说a 与 b 是同一个对象。而采用切片方式赋值则不会

    def f(n):
        t=[]
        s=[1,1]
        for i in range(n):
            t.append(1)   
            if i>1:
                for j in range(1,i):
                    t[j]=s[j]+s[j-1]
                s=t[:]
            yield t
    m=f(7)
    for k in m:
        print(k)

     

  • 相关阅读:
    day04
    day02
    day01
    if语句用户交互字符串
    python安装和pycharm安装教程
    day1预习
    博客园的使用
    python day 3
    从cbv到fbv:用函数写视图与用类写视图的区别(drf与restful)
    resful规范: 进行数据交换时的代码潜规则
  • 原文地址:https://www.cnblogs.com/soberkkk/p/12620474.html
Copyright © 2011-2022 走看看