day19 生成器,迭代器

2022-08-23 18:18:09 字數 1476 閱讀 1621

一、列表解析

l1 = ['

雞蛋%s

' % i for i in range(10) if i > 5]

print(l1) #

['雞蛋6', '雞蛋7', '雞蛋8', '雞蛋9']

這種方法比較佔記憶體,因為要先生成列表,列表佔記憶體

print(sum(i for i in range(100000000)))

這種方法計算 1-10000000 的和計較節省記憶體, 如果直接用 sum([i for i in range(100000000)]),會先生成列表,比較佔記憶體

二、生成器函式

import

time

deftest():

print('

開始生孩子啦。。。。。。')

yield'我

'#return

time.sleep(3)

print('

開始生兒子啦')

yield'兒子

'time.sleep(3)

print('

開始生孫子啦')

yield'孫子

'res=test()

print(res) #

print(res.__next__()) #

開始生孩子啦。。。。。。#我

print(res.__next__()) #

開始生兒子啦#兒子

print(res.__next__()) #

開始生孫子啦

#孫子

三、計算人口比例

def

get_nume():

with open(

'2.py

','r

',encoding='

utf-8

') as f:

for line in

f:

yield

line

gen =get_nume()

res = sum(int(eval(i)['

population

']) for i in

gen)

print('

總人數為:%s

' %res) #

10gen = get_nume() #

gen 已經被迭代完了。需要重新賦值

for i in

gen:

print(eval(i)['

name

'],'

:',int(eval(i)['

population

'])*100/res,'

%') #

北京 : 10.0 %

#河南 : 20.0 %

#江蘇 : 30.0 %

#廣東 : 40.0 %

day19 生成器函式

語法上和函式類似 生成器函式和常規函式幾乎是一樣的。它們都是使用def語句進行定義,差別在於,生成器使用yield語句返回乙個值,而常規函式使用return語句返回乙個值。自動實現迭代器協議 對於生成器,python會自動實現迭代器協議,以便應用到迭代背景中,如for迴圈,sum函式 由於生成器自動...

day19 生成器函式

語法上和函式類似 生成器函式和常規函式幾乎是一樣的。它們都是使用def語句進行定義,差別在於,生成器使用yield語句返回乙個值,而常規函式使用return語句返回乙個值。自動實現迭代器協議 對於生成器,python會自動實現迭代器協議,以便應用到迭代背景中,如for迴圈,sum函式 由於生成器自動...

day19 生成器 函式遞迴

目錄 二 三元表示式 三 生成式 四 函式的遞迴 前引 上節課思考 多個裝飾器的載入和執行分析 def deco1 func1 func1 warpper2 res1 func1 args,kwargs return res1 def deco2 func2 func2 warpper3 res2 ...