python学习之-生成器

Posted clyde_S

tags:

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

什么是生成器

生成器就是一种自定义一的迭代器

 

为什么要有生成器

1. 提供一种自定义迭代器的解决方案

 

 yield 和 return的区别

相同点:都能返回值,并且返回值没有类型与个数限制
不同点:yield可以返回值多次值,而return只能返回一次值

PS:函数只要遇到return就整个程序都结束,而yield只要函数运行遇到yield就会暂停,继续运行一次next才会往下走

如何使用生成器

在函数内但凡出现yield的关键字,该函数不是生成器

在函数内但凡出现yoeld的关键字,然后调用函数将不会立即执行函数体代码,该返回值就是生成器,即我们自定义一的迭代器

 

自定义一迭代器

def func():
  print(‘first‘)
  yield 1
  print(‘second‘)
  yield 2
  print(‘third‘)
  yield 3
  print(‘fourth‘)

g=func() #将返回值赋值给一个变量
print(g) #打印一个返回值会提示这是一个生成器对象

next(g) #next的时候生成器才会执行

res = next(g) #将next(g)的返回值赋值给一个变量

print(res) #就会得到一个返回值

PS:生成器对象本质就是迭代器,所以生成器就是一个自定义一迭代器

PS:生成器的工作原理,当next()时候遇到yield,就会暂停,这时候需要继续next一下运行一次,获取值再遇到到yield暂停,如此往复获取值

 

生成器实例

python3中range()方法已经定义成可迭代对象

用迭代器模拟range()方法的运行

def my_range(start,stop,step=1): #start=1(起始位置) stop=7(结束位置) step=2(步长)
  while start < stop: 
    yield start 
    start+=step # start=7


res=my_range(1,7,2) #调用函数的时候会得到一个返回值,这个返回值就是一个生成器对象,赋值给一个变量

print(next(res))

PS:生成器打印时候和迭代器一样,用next()得到函数运行的结果

PS:生成器不触发是不会产生任何值,所以一定要next去触发


















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

python学习之-生成器

python学习之第四天

python学习之-- 生成唯一ID

python3学习之生成器

Python学习之三大名器-装饰器迭代器生成器

python学习之高级特性