生成器,生成器表達式,三元表達式

1,什麼是生成器?編程

只要函數內部包含yield關鍵字,那麼函數名()獲得的結果就是生成器,並且不會執行函數內部代碼app

def func():
  print('============first')
  yield 1函數

  print('second)code

  yield 2內存

  print(third)input

  yield3generator

  print('end')it

g=func()object

print(g)yield

2  ,生成器就是迭代器

g.__iter__

g.__next__

生成器就是迭代器,所以能夠這麼取值

res=next(g)

print(res)

3,攜程函數   yield

yield 關鍵字的另一種使用形勢:表達式形式的yield

def eater(name):
  print('%s 準備開始吃飯啦'%name)

  foo_list=[]
  while  True:

    food=yield food_list

    print('%s吃了%s'%(name,food_list)

    food_list.append(food)

g=eater('egon')

g.send(None)#對於表達式形式的yield,在使用時,第一次必須傳None,g.send(None)等同於next(g)

g.send('真顱骨')

g.send('蒸熊掌')

yield 總結

1,把函數作成迭代器

2,對比return, 能夠返回屢次值,能夠掛起\保存函數的運行狀態

 

4,三元表達式

name=input('姓名')

res='sb '  if name =='alex' else  'NB'

列表推導式

egg_list=[]

for i in range (10):

  egg_list.append('雞蛋%s' %i)

egg_list =['雞蛋%s'%i   for  i  in range(10)]

優勢:方便,改變了編程習慣,可稱之爲聲明式編程

 

五,生成器表達式

1, 把 列表推導式的[ ]換成()就是生成器表達式

一、把列表推導式的[]換成()就是生成器表達式

#二、示例:生一筐雞蛋變成給你一隻老母雞,用的時候就下蛋,這也是生成器的特性
>>> chicken=('雞蛋%s' %i for i in range(5))
>>> chicken
<generator object <genexpr> at 0x10143f200>
>>> next(chicken)
'雞蛋0'
>>> list(chicken) #因chicken可迭代,於是能夠轉成列表
['雞蛋1', '雞蛋2', '雞蛋3', '雞蛋4',]

#三、優勢:省內存,一次只產生一個值在內存中
相關文章
相關標籤/搜索