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

Posted poetL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python生成器, 列表解析与字典解析相关的知识,希望对你有一定的参考价值。

什么是生成器

  可以理解为数据类型,自动实现了 迭代器协议(其他的数据类型需要调用自己内置的__iter__方法,所以生成器是可迭代对象

生成器分类及在python中的表现:

  1.生成器函数:常规函数定义,   使用yield语句 而不是return语句 返回结果, yield语句一次返回一个结果

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

 

 

 

  2. 生成器表达式: 类似于 列表推到, 但是生成器 返回按需产生的结果

  

#三元表达式
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__())

总结:

  1: 列表解析的 [] 换成()就是 声称其表达式

  2: 列表解析与 生成器表达式都是 遍历编程方式,只不过 生成器表达式更节省内存

  3: Python不但使用迭代器协议,让for循环变得更加通用。大部分内置函数也使用迭代器协议访问对象

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

 

生成器总结   

  • 语法与函数类似
  • 状态挂起不用等待列表全部生成 ,生产一个就可以yield一个
  • 自动返回迭代器协议

 yield两个特点:
  

  • 相当于 return做返回值 
  • 保留函数的运行状态






以上是关于Python生成器, 列表解析与字典解析的主要内容,如果未能解决你的问题,请参考以下文章

Python 迭代器生成器和列表解析

第4.4节 Python解析与推导:列表解析字典解析集合解析

Python代码阅读(第40篇):通过两个列表生成字典

python课程第二周 内置数据结构——列表和元组

玩转 Python 列表解析式能用一行代码写的,千万别敲回车!

玩转 Python 列表解析式能用一行代码写的,千万别敲回车!