(yield)生成器是自定義的迭代器,本質就是迭代器python
生成器必須在函數體內定義,而且生成器直接調用不會執行函數體內代碼編程
經過__next__()取值纔會執行函數體內代碼,而且yield會返回一次值,一次一個值(能夠返回屢次)。函數
面向過程編程思想相似於工廠流水線,即先作什麼後作什麼。code
優勢:複雜的問題流程化,簡單化索引
缺點:可擴展性差資源
列表生成式可依賴索引取值,方便,可是耗費資源generator
生成器表達式沒有索引取值,取值不方便,可是節省資源it
res1 = (i for i in range(10) if i % 2 == 0) print(res1) # 此處寫答案--> 生成器表達式取餘隱藏了0,2,4,6,8; 顯示<generator object <genexpr> at 0x000001E75DCC0DB0> res2 = [i + 2 for i in res1] print(res2) # 此處寫答案--> 2 4 6 8 10 res3 = sorted(res2, reverse=True) print(res3) # 此處寫答案--> 10 8 6 4 2 0
a = [2, 5] b = [a] * 4 print(b) # 此處寫答案-- >[[2, 5],[2, 5],[2, 5],[2, 5]] b = tuple(b) b[0][0] = 3 print(b) # 此處寫答案, 請簡述答案爲什麼是這個結果-->([3, 5], [3, 5], [3, 5], [3, 5]) 由於這裏的b是元組套列表,b後面的第一個0表明元組索引,第二個表明列表索引,由於元組是不可變類型,列表是可變類型;因此列表裏面索引爲0的都修改爲3
print([i % 2 for i in range(10)]) # 此處寫答案--> [0,1,0,1,0,1,0,1] print((i % 2 for i in range(10))) # 此處寫答案--> 別看了,生成器不會給你顯示的
print([x * x for x in range(1, 11)])
key = lambda 參數 : 返回值 print(key(參數)) 和內置函數一塊兒用
list1 = [100, 200, 300, 400, 500, 600, 700] print(min(list1)) print(max(lsit1)) print(max(sorted(list1,reverse=True))) print(min(sorted(list1,reverse=True))) print(max(list1,key=lambda x:x)) print(min(list1,key=lambda x:x))
user_dic = { '張全蛋': 20000, '趙鐵柱': 3000, '李小花': 8000, '伍六七': 1500 } print(max(user_dic,key=lambda x:user_dic[x]))
1.一行代碼實現 9*9 乘法表
2.繼續編寫ATM加購物車class