列表表達式、生成器表達式和協程函數python
1、列表表達式:編程
常規方式示例:app
egg_list=[]
for i in range(100):
egg_list.append("egg%s"%i)
print(egg_list)
執行結果是:函數
['egg0', 'egg1', 'egg2', 'egg3', 'egg4', 'egg5', 'egg6', 'egg7', 'egg8', 'egg9', 'egg10', 'egg11', 'egg12', 'egg13', 'egg14', 'egg15', 'egg16', 'egg17', 'egg18', 'egg19', 'egg20', 'egg21', 'egg22', 'egg23', 'egg24', 'egg25', 'egg26', 'egg27', 'egg28', 'egg29', 'egg30', 'egg31', 'egg32', 'egg33', 'egg34', 'egg35', 'egg36', 'egg37', 'egg38', 'egg39', 'egg40', 'egg41', 'egg42', 'egg43', 'egg44', 'egg45', 'egg46', 'egg47', 'egg48', 'egg49', 'egg50', 'egg51', 'egg52', 'egg53', 'egg54', 'egg55', 'egg56', 'egg57', 'egg58', 'egg59', 'egg60', 'egg61', 'egg62', 'egg63', 'egg64', 'egg65', 'egg66', 'egg67', 'egg68', 'egg69', 'egg70', 'egg71', 'egg72', 'egg73', 'egg74', 'egg75', 'egg76', 'egg77', 'egg78', 'egg79', 'egg80', 'egg81', 'egg82', 'egg83', 'egg84', 'egg85', 'egg86', 'egg87', 'egg88', 'egg89', 'egg90', 'egg91', 'egg92', 'egg93', 'egg94', 'egg95', 'egg96', 'egg97', 'egg98', 'egg99']
使用列表表達式的方式是:(2行代碼便可)spa
示例:協程
l=["egg%s"%i for i in range (100)]
print(l)
執行結果是:blog
['egg0', 'egg1', 'egg2', 'egg3', 'egg4', 'egg5', 'egg6', 'egg7', 'egg8', 'egg9', 'egg10', 'egg11', 'egg12', 'egg13', 'egg14', 'egg15', 'egg16', 'egg17', 'egg18', 'egg19', 'egg20', 'egg21', 'egg22', 'egg23', 'egg24', 'egg25', 'egg26', 'egg27', 'egg28', 'egg29', 'egg30', 'egg31', 'egg32', 'egg33', 'egg34', 'egg35', 'egg36', 'egg37', 'egg38', 'egg39', 'egg40', 'egg41', 'egg42', 'egg43', 'egg44', 'egg45', 'egg46', 'egg47', 'egg48', 'egg49', 'egg50', 'egg51', 'egg52', 'egg53', 'egg54', 'egg55', 'egg56', 'egg57', 'egg58', 'egg59', 'egg60', 'egg61', 'egg62', 'egg63', 'egg64', 'egg65', 'egg66', 'egg67', 'egg68', 'egg69', 'egg70', 'egg71', 'egg72', 'egg73', 'egg74', 'egg75', 'egg76', 'egg77', 'egg78', 'egg79', 'egg80', 'egg81', 'egg82', 'egg83', 'egg84', 'egg85', 'egg86', 'egg87', 'egg88', 'egg89', 'egg90', 'egg91', 'egg92', 'egg93', 'egg94', 'egg95', 'egg96', 'egg97', 'egg98', 'egg99']
若是想加入if判斷也很是便利內存
示例:generator
l=["egg%s"%i for i in range (100) if i >90]
print(l)
l=["egg%s"%i for i in range (100) if i >90 if i>95]
print(l)
執行結果是:io
['egg91', 'egg92', 'egg93', 'egg94', 'egg95', 'egg96', 'egg97', 'egg98', 'egg99']
['egg96', 'egg97', 'egg98', 'egg99']
若是須要使用多個for循環的話
常規方式:
示例:
import os#導入模塊
g=os.walk("C:\\SWTOOLS")#查看電腦C盤下的SWTOOLS
l=[]
for i in g :
for j in i :
l.append("%s\\%s"%(i[0],j))
print(l)
執行結果是:
['C:\\SWTOOLS\\C:\\SWTOOLS', "C:\\SWTOOLS\\['Theme']", 'C:\\SWTOOLS\\[]', 'C:\\SWTOOLS\\Theme\\C:\\SWTOOLS\\Theme', 'C:\\SWTOOLS\\Theme\\[]', 'C:\\SWTOOLS\\Theme\\[]']
使用列表表達式的方式是:
示例:
import os#導入模塊
g=os.walk("C:\\SWTOOLS")#查看電腦C盤下的SWTOOLS
l=["%s\\%s"%(i[0],j)for i in g for j in i ]
print(l)
執行結果是:
['C:\\SWTOOLS\\C:\\SWTOOLS', "C:\\SWTOOLS\\['Theme']", 'C:\\SWTOOLS\\[]', 'C:\\SWTOOLS\\Theme\\C:\\SWTOOLS\\Theme', 'C:\\SWTOOLS\\Theme\\[]', 'C:\\SWTOOLS\\Theme\\[]']
2、生成器表達式:
示例:
l=("egg%s"%i for i in range (100))
print(l)
print(l.__next__())#每一次._next_一下,取出一個值
print(l.__next__())
print(l.__next__())
print(l.__next__())
print(l.__next__())
print(l.__next__())
print(l.__next__())##超出邊界,當for循環結束時,捕捉到StopIteration異常,終止迭代
執行結果是:
<generator object <genexpr> at 0x0000000001DDFF68>
egg0
egg1
egg2
egg3
egg4
egg5
egg6
總結:
1.把列表解析的[]換成()獲得的就是生成器表達式
2.列表解析與生成器表達式都是一種便利的編程方式,只不過生成器表達式更節省內存
3、協程函數
即生成器yield的表達式的形式
示例:
def eater (name):
print("%s start to eat"%name)
food_list=[]
while True:
food=yield food_list
print("%s eat %s"%(name,food))
food_list.append(food)
e=eater("tom")#執行的是foo_1(「tom」)
next(e)#觸發函數運行
print(e.send("雞蛋"))
print(e.send("蘋果"))
執行結果是:
tom start to eat
tom eat 雞蛋
['雞蛋']
tom eat 蘋果
['雞蛋', '蘋果']