• 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)

     

  • 相关阅读:
    Redis 简介
    图片懒加载、selenium和PhantomJS
    Python网络爬虫之三种数据解析方式
    Scrapy框架之CrawlSpider
    Scrapy 框架
    python 网络爬虫概念与HTTP(s)协议
    Mysql概念及基本操作
    Python re 模块
    线程与进程应用场景
    全局解释器锁 GIL
  • 原文地址:https://www.cnblogs.com/soberkkk/p/12620474.html
Copyright © 2020-2023  润新知