文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python3的生成器和迭代器代码怎么写

2023-06-28 23:49

关注

本篇内容主要讲解“Python3的生成器和迭代器代码怎么写”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python3的生成器和迭代器代码怎么写”吧!

1.生成器

# 一边循环一边计算的机制,称为生成器:generator;# 创建generator方法:# 1.把一个列表生成式的[]改成()numsList = [num * num for num in range(10)]print("列表生成式生成numsList:",numsList)numsGenerator = (num * num for num in range(10))print("生成器生成numsGenerator:",numsGenerator)# 使用next()函数获得generator的下一个返回值print("打印numsGenerator第一个元素:",next(numsGenerator))print("打印numsGenerator第二个元素:",next(numsGenerator))print("--------------------------------------------------------")# 使用for循环打印generator元素print("使用循环打印生成器中的元素!")for num in numsGenerator:    print(num,end = " ")print("\n")print("--------------------------------------------------------")# 斐波拉契数列(Fibonacci):除第一个和第二个数外,任意一个数均可由前两个数相加得到# 1,1,2,3,5,8,13,21,34def fibonacci(num):    n, a, b = 0, 0, 1    while n < num:        print(b,end = "  ")        a, b = b, a + b        n = n + 1    return "Done"print("Fibonacci前10项为:")fibonacci(10)print("\n")print("--------------------------------------------------------")# 2.把fibonacci()函数变成generator函数def fibonacci(num):    n, a, b = 0, 0, 1    while n < num:        yield b        a, b = b, a + b        n = n + 1    return "Done"# Tips:# 1.如果一个函数定义中包含yield关键字,则这个函数是一个generator函数;# 2.调用一个generator函数将返回一个generator;fib = fibonacci(10)print("fib的值:",fib)

# 结果输出:
列表生成式生成numsList: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
生成器生成numsGenerator: <generator object <genexpr> at 0x0000028F0E6ACB88>
打印numsGenerator第一个元素: 0
打印numsGenerator第二个元素: 1
--------------------------------------------------------
使用循环打印生成器中的元素!
4 9 16 25 36 49 64 81 

--------------------------------------------------------
Fibonacci前10项为:
1  1  2  3  5  8  13  21  34  55  

--------------------------------------------------------
fib的值: <generator object fibonacci at 0x0000028F0E7839A8>
 

# 普通函数和generator函数的执行流程:# 1.普通函数:顺序执行,遇到return语句或最后一行函数语句就返回;# 2.generator函数:在每次调用next()的时候执行,遇到yield语句返回;# 3.再次执行时从上次返回的yield语句处继续执行;# 实例:定义一个generator函数,依次返回"Willard",18,"Engineer"def willardInfo():    print("STEP1")    yield "Willard"    print("--------")    print("STEP2")    yield 18    print("--------")    print("STEP3")    yield "Engineer"# 调用willardInfo()这个generator函数,先生成一个generator对象# 然后用next()函数不断获得下一个返回值,即可用循环直接打印willardInfoObject = willardInfo()for willard in willardInfoObject:    print(willard)

# 结果输出:
STEP1
Willard
--------
STEP2
18
--------
STEP3
Engineer
 

2.迭代器

# 可直接用于for循环的数据类型:# 1.list、tuple、dict、set、str等;# 2.generator,包括:生成器和带yield的generator function;# 3.可以直接作用于for循环的对象称为可迭代对象:Iterable;# 4.使用isinstance()判断一个对象是否为Iterable对象;from collections.abc import Iterableprint("判断list是否为可迭代对象!",isinstance([],Iterable))print("判断dict是否为可迭代对象!",isinstance({},Iterable))print("判断str是否为可迭代对象!",isinstance("Willard",Iterable))print("判断生成式是否为可迭代对象!",isinstance((num for num in range(10)),Iterable))print("判断number是否为可迭代对象!",isinstance(99,Iterable))

# 结果输出:
判断list是否为可迭代对象! True
判断dict是否为可迭代对象! True
判断str是否为可迭代对象! True
判断生成式是否为可迭代对象! True
判断number是否为可迭代对象! False
 

# 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator# 使用isinstance()判断一个对象是否为Iterator对象;from collections.abc import Iteratorprint("判断生成器是否为迭代器!",isinstance((num for num in range(10)),Iterator))print("判断list是否为迭代器!",isinstance([],Iterator))print("判断dict是否为迭代器!",isinstance({},Iterator))print("判断str是否为迭代器!",isinstance("Willard",Iterator))print("----------------------------------------------------------")# Tips:# 1.生成器都是Iterator对象,但list、dict、str是Iterable但不是Iterator;# 2.Iterator对象表示数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,# 直到没有数据时抛出StopIteration错误;这个数据流可以看作一个有序序列,# 但不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,# Iterator的计算是惰性的,只有在需要返回下一个数据时才计算;# 3.使用iter()函数把list、dict、str变成Iterator;print("使用iter()函数把list、dict、str变成Iterator.")print("判断list是否为迭代器!",isinstance(iter([]),Iterator))print("判断dict是否为迭代器!",isinstance(iter({}),Iterator))print("判断str是否为迭代器!",isinstance(iter("Willard"),Iterator))

# 结果输出:
判断生成器是否为迭代器! True
判断list是否为迭代器! False
判断dict是否为迭代器! False
判断str是否为迭代器! False
----------------------------------------------------------
使用iter()函数把list、dict、str变成Iterator.
判断list是否为迭代器! True
判断dict是否为迭代器! True
判断str是否为迭代器! True

到此,相信大家对“Python3的生成器和迭代器代码怎么写”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯