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

1,什么是生成器?

只要函数内部包含yield关键字,那么函数名()得到的结果就是生成器,而且不会执行函数内部代码

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

  print('second)

  yield 2

  print(third)

  yield3

  print('end')

g=func()

print(g)

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, 把 列表推导式的[ ]换成()就是生成器表达式

1、把列表推导式的[]换成()就是生成器表达式

#2、示例:生一筐鸡蛋变成给你一只老母鸡,用的时候就下蛋,这也是生成器的特性
>>> chicken=('鸡蛋%s' %i for i in range(5))
>>> chicken
<generator object <genexpr> at 0x10143f200>
>>> next(chicken)
'鸡蛋0'
>>> list(chicken) #因chicken可迭代,因而可以转成列表
['鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4',]

#3、优点:省内存,一次只产生一个值在内存中

猜你喜欢

转载自www.cnblogs.com/lijieshi/p/9177748.html
今日推荐