Python-11-生成器

Python-11-生成器,第1张

概述一、定义 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他数据类型需要调用__iter__方法),所以生成器就是一种迭代器。 二、生成器的两种形式 1. 生成器函数 使用yield代替return返回结果,yield语句一次返回一个结果,返回一个结果后,挂起函数的状态,下次继续执行。 def fib(max): n, a, b = 0, 0, 1 while n 一、定义

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

二、生成器的两种形式 1. 生成器函数

使用yIEld代替return返回结果,yIEld语句一次返回一个结果,返回一个结果后,挂起函数的状态,下次继续执行。

def fib(max):    n,a,b = 0,1    while n < max:        yIEld b        a,b = b,a + b        n = n + 1    return ‘done‘f = fib(10)print(next(f))print(next(f))print(next(f))print(next(f))
# 函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yIEld语句返回,再次执行时从上次返回的yIEld语句处继续执行。def odd():    print(‘step 1‘)    yIEld 1    print(‘step 2‘)    yIEld(3)    print(‘step 3‘)    yIEld(5)>>> o = odd()>>> next(o)step 11>>> next(o)step 23>>> next(o)step 35>>> next(o)Traceback (most recent call last):  file "<stdin>",line 1,in <module>stopiteration
2. 生成器表达式
# 三元表达式name = ‘alex‘res = ‘SB‘ if name == ‘alex‘ else ‘123‘print(res)SB# 列表解析l1 = [‘鸡蛋%s‘ % i for i in range(1,10)]l2 = [‘鸡蛋%s‘ % i for i in range(1,10) if i > 5]# l3 = [‘鸡蛋%s‘ % i for i in range(1,10) if i > 5 else i] # 没有四元表达式print(l1)print(l2)[‘鸡蛋1‘,‘鸡蛋2‘,‘鸡蛋3‘,‘鸡蛋4‘,‘鸡蛋5‘,‘鸡蛋6‘,‘鸡蛋7‘,‘鸡蛋8‘,‘鸡蛋9‘][‘鸡蛋6‘,‘鸡蛋9‘]# 生成器表达式g = (‘鸡蛋%s‘ % i for i in range(1,10) if i > 5)print(next(g))print(next(g))print(next(g))print(next(g))鸡蛋6鸡蛋7鸡蛋8鸡蛋9
总结

以上是内存溢出为你收集整理的Python-11-生成器全部内容,希望文章能够帮你解决Python-11-生成器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1197978.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存