Python生成器, 列表解析與字典解析

什麼是生成器python

  能夠理解爲數據類型,自動實現了 迭代器協議(其餘的數據類型須要調用本身內置的__iter__方法,因此生成器是可迭代對象
編程

生成器分類及在python中的表現:app

  1.生成器函數:常規函數定義,   使用yield語句 而不是return語句 返回結果, yield語句一次返回一個結果函數

def test(): yield 1
        yield 2 # 取代了return的位置 不會終止程序 g = test() print(g) print(g.__next__) print(g.__next__)

 

 

 

  2. 生成器表達式: 相似於 列表推到, 可是生成器 返回按需產生的結果spa

  

#三元表達式
name = 'lyg' res = 'SB' if name =='lyg' else 'noob'
print(res)

 

#列表解析
 egg_list = [] for i in range(10): egg_list.append('雞蛋%s' %i) print(egg_list)

l = ['雞蛋%s' %i for i in range(10)]
# l = [i for i in range(10 if i>5] #沒有四元 沒有else
print(l)
# 與列表解析
l = ('雞蛋%s' %i for i in range(10))  # 生成器外部用括號表示 而不是 [] # l 生成器表達式形式
print(l) print(next(l))  # Next 本質就是調用__next__
print(l.__next__())

總結:code

  1: 列表解析的 [] 換成()就是 聲稱其表達式對象

  2: 列表解析與 生成器表達式都是 遍歷編程方式,只不過 生成器表達式更節省內存blog

  3: Python不但使用迭代器協議,讓for循環變得更加通用。大部份內置函數也使用迭代器協議訪問對象內存

sum(x ** 2 for x in range(4)) # 而不是
sum ([x ** 2 for x in range(4)])

 

生成器總結   it

  • 語法與函數相似
  • 狀態掛起不用等待列表所有生成 ,生產一個就能夠yield一個
  • 自動返回迭代器協議

 yield兩個特色:
  

  • 至關於 return作返回值 
  • 保留函數的運行狀態
相關文章
相關標籤/搜索