Python中怎么实现一个生成器函数-创新互联-成都创新互联网站建设

关于创新互联

多方位宣传企业产品与服务 突出企业形象

公司简介 公司的服务 荣誉资质 新闻动态 联系我们

Python中怎么实现一个生成器函数-创新互联

Python中怎么实现一个生成器函数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

10年积累的成都做网站、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站后付款的网站建设流程,更有河北免费网站建设让你可以放心的选择与我们合作。
1.生成器
  • 在 Python 中,一边循环一边计算的机制,称为生成器(Generator);

  • 生成器是一个返回迭代器的函数,只能用于迭代操作;

2.什么是生成器函数
  • 生成器是Python中的一个对象,对这个对象进行操作,可以依次生产出按生成器内部运算产生的数据;

  • 生成器函数指的是函数体中包含yield关键字的函数(yield就是专门给生成器用的return);

  • 生成器可以通过生成器表达式和生成器函数获取到;

3.生成器函数的定义
def add():
    for i in range(10):
        yield i
g = add()
print(g)  # 
print(next(g))  # 0
print(next(g))  # 1
  • 我们可以通过yield关键字来定义一个生成器函数,这个生成器函数返回值就是一个生成器对象;

4.生成器函数的调用
def gen():
    print('111111')
    yield '111111'
    print('222222')
    yield '222222'
    print('333333')
    yield '333333'
g = gen()
print(g)  # 
next(g)   # 111111
next(g)   # 222222
next(g)   # 333333
next(g, 'over')
  • 生成器函数可以使用next()迭代,且每次next()只会返回一次yield的值,然后暂停,下次一次next()时会在当前位置继续,如果没有元素可以迭代了,还 执在行next()则需要给定一个默认值,不给默认值会报错;

  • 如果在生成器函数中使用return,则会终止迭代,且不能得到返回值;

def gen():
    print('111111')
    yield '111111'
    print('222222')
    return '222222'
    print('333333')
    yield '333333'
g = gen()
print(g)  # 
next(g)   # 111111
next(g)   # 222222, 抛出异常
5.生成器函数的使用场景
# 死循环
def way():
    i = 0
    while True:
        i += 1
        yield i
c = way()
print(next(c)) # 1
print(next(c)) # 2
print(next(c)) # 3
print(next(c)) # 4
print(next(c)) # 5
  • 在生成器中使用死循环,不会一直执行,仍旧是执行多少次next(),返回多少个值;

6.生成器函数中的语法糖
# 普通生成器函数way1
def way1():
    for i in range(5):
        yield i
# 带语法糖的生成器函数way2
def way2():
    yield from range(5)
#循环输出way1
for i in way1():
    print(i)  #0 1 2 3 4
#循环输出way2
for j in way2():
    print(j)  #0 1 2 3 4
  • 语法糖指那些没有给计算机语言添加新功能,而只是对人类来说更“甜蜜”的语法;

  • 语法糖给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读;

  • 生成器的语法糖也就是生成器的一种语法,作用是使代码更加简洁;

看完上述内容,你们掌握Python中怎么实现一个生成器函数的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联-成都网站建设公司行业资讯频道,感谢各位的阅读!


文章名称:Python中怎么实现一个生成器函数-创新互联
文章网址:http://kswsj.cn/article/espcd.html

其他资讯