生成器

Posted yangjinquan

tags:

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

一 、什么是生成器:
  可以理解为一种数据类型,这种数据类型自动实现了迭代器协议,(其他的数据类型需要调用自己的__iter__方法),所以生成器就是可迭代对象。

  生成器的分类和表达形式特点(Python有两种不同方式的生成器)
  1、生成器函数:常规函数定义,但是,使用yield语句二不是return语句返回结果,yield语句一次返回一个结果,在每个结果中间,
  挂起函数的状态,以便磁材从它离开的地方继续执行
  2.生成器表达式:类似于列表的推导,生成器返回按需求生产结果的一个对象,而不是一次构建一个结果列表o

  为何使用生成器之生成器的优点:
  Python使用生成器对延迟操作提供支持,所谓延迟,是指在需要的时候才产生结果,而不是立即生产将结果,这也是生成器的主要好处

  生成器小结:
  1、是可迭代对象
  2、实现了计算的延迟,省内存空间
  3、生成器本质和其他的数据内省一样,都是实现了迭代协议,只不过生成器附加了一个延迟计算省内存空间的好粗,其余的可迭代对象可有这点好处


二、普通函数和生成器的区别?
  1、普通函数
    
def show():#普通的函数
    return 普通的函数
res1 = show()
print(res1)

  2、生成器函数

def test():#generator object test at 0x000001CB7C9CCFC0> 关键字 generator:生成器
    yield yield 生成器
    yield 1
    yield 2
res = test()
print(res)
print(res.__next__()) #yield 生成器
print(res.__next__()) #1
print(res.__next__()) #2

总结:普通函数和生成器函数的返回值 关键字使用的不一样。一个是“return” 和 “yield”。生成器还能执行next()方法

 

二、

  三元表达式:

name = yjq
#‘sb‘ if name == ‘yjq‘ 如果为true 即返回帅哥      else ‘sb‘ 为假返回 sb‘
res_1 = 帅哥 if name == yjqelse sb
print(res_1)

  

  生成器表达式:

#生成器表达式

resault = (k for k in range(10))   #<generator object <genexpr> at 0x000002492DDC16D0>
print(resault)
print(resault.__next__())

 




















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

python 生成器:生成器基础生成器表达式

python 生成器:生成器基础生成器表达式

生成器和生成器表达式

Python-生成器

生成器 生成器函数

python列表生成器与生成器