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作返回值 
  • 保留函数的运行状态
相关文章
相关标签/搜索