Python随心记--综合练习 生成器特性阐释

时间:2021-12-29 23:58:56
def getpopulation():
    with open('a.txt',encoding='utf-8') as f:
        for i in f:
            yield i
getP = getpopulation()
getPnum = eval(getP.__next__())
print(getPnum['population'])

def getpopulation():
    with open('a.txt',encoding='utf-8') as f:
        for i in f:
            yield i
getP = getpopulation()
all_pop = sum(eval(i)['population'] for i in getP)   #获取总人数
print(all_pop)
#注意:迭代只能迭代一次,这里getP在上边已经迭代过了,所以下面的for循环不能在使用
#可以重新赋值给两一个变量
for i in getP:
    print('%s %%' %eval(i)['population']/all_pop)
#yield 相当于return 控制的是函数的返回值
#x=yield的另外一个特性,接收send传过来的值赋给x
def test():
    print('开始了')

    fisrt = yield 1
    print('第一次',fisrt)

    yield 2
    print('第二次')
t = test()
res = t.__next__()
print(res)
t.send(None)   #可以触发生成器执行
res = t.send('函数停留在哪儿,我就在哪儿赋值')   #可以触发生成器执行
print(res)