一、列表解析
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)]),會先生成列表,比較佔記憶體
二、生成器函式
importtime
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__()) #
開始生孫子啦
#孫子
三、計算人口比例
defget_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 ...