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循环才能运行函数。

  • 相关阅读:
    bzoj1415 NOI2005聪聪和可可
    Tyvj1952 Easy
    poj2096 Collecting Bugs
    COGS 1489玩纸牌
    COGS1487 麻球繁衍
    cf 261B.Maxim and Restaurant
    cf 223B.Two Strings
    cf 609E.Minimum spanning tree for each edge
    cf 187B.AlgoRace
    cf 760B.Frodo and pillows
  • 原文地址:https://www.cnblogs.com/cjsword/p/10438396.html
Copyright © 2011-2022 走看看