1.语法上:和函数类似,都用def定义。
只不过生成器通过yield可以返回多个值,并保存状态;函数用return返回一个值,遇见return就结束了。
2.自动生成迭代器协议。
3.状态挂起:生成器使用yield语句返回一个值,yield语句挂起生成器函数的状态,以便之后从他挂起的地方继续执行。
优点1:延迟计算,一次返回一个值,不会一次生成所有的结果,因此不会卡逼,处理大数据时很有用
print(sum([i for i in range(100)])) #先创立一个列表,会占据很大内存 print(sum((i for i in range(100)))) #不用创建列表,几乎不占内存(生成器的形式)
优点2:增强代码的可读性,使代码更简洁
(补充:从文件里提取出来的全是字符串的格式,需要通过eval函数将字符串中 包含的类型转换过来)
求一个文档中,各省市人口占总人口的比例
step1:求总人口
{"loc":"hebei","pop":100000}
{"loc":"henan","pop":200000}
#丑陋的 方法
f=open("a.txt","r",encoding="utf-8")
def yxz():
res=0
for p in f:
p_dic=eval(p)
res+=p_dic["pop"]
return res
all_pop=yxz()
print(all_pop)
#帅气的 方法
all_pop=sum(eval(i)["pop"] for i in f) #关键是:文件也可以用for循环进行遍历,每一次遍历取一行的内容,注意是字符串的形式,需要进行转换
print(all_pop) #eval(i)是将这一行转换成字典,然后再取pop,取出key值,利用sum相加
👆👆👆👆👆👆👆👆这样就将总人口
浙公网安备 33010602011771号