zoukankan      html  css  js  c++  java
  • 生成器拓展内容

    注意事项:

    1.生成器只能遍历一次(母鸡一生只能下一定数量的蛋,下完了就死掉了)

    求出詹姆斯15个赛季常规赛总得分,并求出单赛季所占总得分比例
    single season scores.txt 文件内容
    
    {'赛季':'2003-2004赛季','得分':1654}
    {'赛季':'2004-2005赛季','得分':2175}
    {'赛季':'2005-2006赛季','得分':2478}
    {'赛季':'2006-2007赛季','得分':2132}
    {'赛季':'2007-2008赛季','得分':2250}
    {'赛季':'2008-2009赛季','得分':2304}
    {'赛季':'2009-2010赛季','得分':2258}
    {'赛季':'2010-2011赛季','得分':2111}
    {'赛季':'2011-2012赛季','得分':1683}
    {'赛季':'2012-2013赛季','得分':2036}
    {'赛季':'2013-2014赛季','得分':2089}
    {'赛季':'2014-2015赛季','得分':1743}
    {'赛季':'2015-2016赛季','得分':1920}
    {'赛季':'2016-2017赛季','得分':1954}
    {'赛季':'2017-2018赛季','得分':2251}
    
    def point(filename):
        with open('single season scords', 'r', encoding='utf-8') as f:
            for r in f:
                yield r
    
    p = point('single season scores.txt')
    all = sum(eval(i)['得分'] for i in p)
    print(all)
    
    for i in p:
    mm    print(i/all)

    在上述代码中,单赛季所占总得分的比例求不出来,这是因为,生成器只能遍历一次。在我们执行sum语句的时候,就遍历了我们的生成器,当我们再次遍历我们的生成器的时候,将不会有任何记录。所以,上面的代码不会有任何输出。

    因此,生成器的唯一注意事项就是:生成器只能遍历一次。

    2.将函数赋值给一个变量时,普通函数与生成器函数所产生的效果差别

    #普通函数
    def pro():
        print('kingjames')
        return 0
    t = pro()
    
    
    #生成器函数
    def pro():
        print('kingjames')
        yield 0
    t = pro()

    上述代码中,普通函数会打印出‘kingjames’,而生成器函数不会打印出来普通函数,将函数赋值给变量时,相当于执行这个函数。而生成器函数,将函数赋值给变量时,相当于只是拿到了这个生成器,并没有去执行它,得调用__next__方法,或者使用for循环才能运行函数。

  • 相关阅读:
    CSS 对浏览器的兼容性技巧总结
    后台拿webshell的方法总结
    WEBSHELL权限提升技巧
    学习linq处理数据 遥远的青苹果
    在asp.net中怎么导出excel表
    SQL提取数据库记录按字的笔画排序
    主板前置音频线怎么接
    Oracle导入导出
    DevExpress GridControl界面汉化(摘自王铭)
    ASP.NET中如何防范SQL注入式攻击
  • 原文地址:https://www.cnblogs.com/cjsword/p/10438396.html
Copyright © 2011-2022 走看看