#!/usr/bin/env python
__author__ = "lrtao2010" #python3.7 迭代器和生成器 #迭代器协议:
'''
1、迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,
要么就引起一个StopIteration异常,已终止迭代,只能往后走,不能往前退.
2、可迭代对象:实现了迭代器协议的对象(对象内部定义一个__iter__()方法),节省内存
3、协议是一种约定,可迭代对象实现了迭代器协议,Python的内部工具(如for、sum、min、max等)
使用迭代器协议访问对象。
''' #for 循环的强大功能
'''
字符串,列表,元祖,字典,集合。这些都不是可迭代对象(没有next方法),在for 循环中,调用了他们的内部
__iter__方法,把他们变成了可迭代对象。
for循环调用可迭代对象的__next__方法去取值,并且for 循环可以捕捉StopIteration异常,终止迭代。 '''
# l_test=[1,2,3]
# iter_l_test=l_test.__iter__()
# print(iter_l_test.__next__())
# print(iter_l_test.__next__())
# print(iter_l_test.__next__())
# print(iter_l_test.__next__())
# # 1
# # 2
# # 3
# # Traceback (most recent call last):
# # File "D:/python3/app/Module_and_Functions/iterator_and_generator.py", line 28, in <module>
# # print(iter_l_test.__next__())
# # StopIteration #用whilex循环模拟for循环
# l_test=[1,2,3]
# iter_l_test=l_test.__iter__()
# while True:
# try:
# #print(iter_l_test.__next__())
# print(next(iter_l_test))
# except StopIteration:
# #print('end')
# break #生成器
'''
生成器也是一种数据类型,这种数据类型自动实现了“迭代器协议”,生成器是可迭代对象。 生成器分类:
1、生成器函数:常规函数定义,但是使用yield语句而不是return 语句返回结果,yield语句
一次返回一个结果,可以使用多次,在每个结果中间,挂起函数的状态,以便下次从它离开的地方
继续执行。 2、生成器表达式:类似列表推导式,生成器返回按需产生结果的一个对象,而不是一次构建
一个完整的结果列表 生成器优点:
在需要的时候才产生结果,不是立即产生结果
''' #生成器函数
# def g_test():
# yield 1
# yield 2
# yield 3
# g_test1=g_test()
# print(g_test1)
# print(g_test1.__next__())
# print(g_test1.__next__())
# print(g_test1.__next__())
# # <generator object g_test at 0x0000000002163570>
# # 1
# # 2
# # 3 #生成器表达式,大数据不会占用大内存
# l_g = ('%s' %i for i in range(10) if i%2 == 0)
# print(l_g)
# print(l_g.__next__())
# print(l_g.__next__())
#print(next(l_g))
# print(l_g.__next__())
# <generator object <genexpr> at 0x0000000002133570>
#
#
#
# #三元表达式
# name = 'test'
# res='True' if name == 'test' else 'False'
# print(res)
# True #列表解析,大数据占用内存比较大
# l_test1=['%s' %i for i in range(10)]
# l_test2=['%s' %i for i in range(10) if i%2 == 0]
# print(l_test1)
# print(l_test2)
# ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
# ['0', '2', '4', '6', '8'] #生成器总结
'''
1、节省内存
2、提高代码可读性
3、只能遍历一次,只能遍历一次,只能遍历一次
'''

python3.7 迭代器和生成器的更多相关文章

  1. python3.5-day5_迭代器_生成器_装饰器_模块

    笔者QQ 360212316 迭代器&生成器 生成器: 一个函数调用返回一个迭代器,那这个函数叫做生成器,如果函数中包含yield语法,那么这个函数就会变成生成器 生成器的特点: 1.生成器必 ...

  2. 【Python3之迭代器,生成器】

    一.可迭代对象和迭代器 1.迭代的概念 上一次输出的结果为下一次输入的初始值,重复的过程称为迭代,每次重复即一次迭代,并且每次迭代的结果是下一次迭代的初始值 注:循环不是迭代 while True: ...

  3. python3 之 迭代器与生成器

    迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束. 迭代器只能往前不会后 ...

  4. Python3+迭代器与生成器

    转载Python3 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素 ...

  5. python3基础: 元组tuple、 列表list、 字典dict、集合set。 迭代器、生成器

    一.元组: tuple Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组 tup2 = (111, 22, 33, ...

  6. python014 Python3 迭代器与生成器

    Python3 迭代器与生成器迭代器迭代是Python最强大的功能之一,是访问集合元素的一种方式..迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结 ...

  7. python3基础: 元组tuple、 列表list、 字典dict、集合set。 迭代器、生成器

    一.元组: tuple Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组 tup2 = (111, 22, 33, ...

  8. python3: 迭代器与生成器(1)

    1. 手动遍历迭代器 你想遍历一个可迭代对象中的所有元素,但是却不想使用for循环. >>> items = [1, 2, 3] >>> # Get the ite ...

  9. python3迭代器和生成器

    1.手动访问迭代器中的元素 #要手动访问迭代器中的元素,可以使用next()函数 In [3]: with open('/etc/passwd') as f: ...: try: ...: while ...

随机推荐

  1. Storm概念学习系列之storm的设计思想

    不多说,直接上干货! storm的设计思想 在 Storm 中也有对流(Stream)的抽象,流是一个不间断的.无界的连续 Tuple(Storm在建模事件流时,把流中的事件抽象为 Tuple 即元组 ...

  2. 配置Spring发送邮件

    推荐查看原博客        转载自:配置Spring发送邮件 Spring Email抽象的核心是MailSender接口.顾名思义,MailSender的实现能够通过连接Email服务器实现邮件发 ...

  3. <Linux系统isosize指令用法>

    isosize命令:iso9660文件系统大小显示 isosize命令用于显示iso9660文件系统的大小,还文件可以使普通文件,也可以是块设备,如/dev/sr0或者/dev/sda.如果没有相关选 ...

  4. 360或其他双核浏览器下在兼容模式用chrome内核渲染的方法

    <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-COM ...

  5. C# 多线程之线程控制

    方案一: 调用线程控制方法.启动:Thread.Start();停止:Thread.Abort();暂停:Thread.Suspend();继续:Thread.Resume(); private vo ...

  6. UICollectionView基础API笔记

    UICollectionView系列API,属性含义笔记.在UICollectionView笔记1中我们了解了UICollectionView是什么,以及可以做什么:在UICollectionView ...

  7. python2和3的区别丶网络编程以及socketserver多线程

    一丶python2和python3的区别 1.编码&字符串 字符串: python2: Unicode v = u"root"  本质上用unicode存储(万国码) (s ...

  8. OutOfMemoryError异常 和 StackOverflowError异常

      OutOfMemoryError异常  StackOverflowError异常  程序计数器 无 无 Java虚拟机栈 如果虚拟机栈可扩展,扩展时无法申请到足够内存 线程请求的栈深度大于虚拟机所 ...

  9. Mac下对PhpStorm主题的添加

    大家都知道,作为一个PHPer,PhpStorm是圈内评价较高的一款IDE. 所以,为了有一个更加个性化的coding界面,我们有很多的主题可以使用. phpStorm自带了好几个主题,你可以通过以下 ...

  10. 【server 安全】更改本地安全策略及禁用部分服务以进一步增强windows server的安全性

    本地安全策略 以上内容的备份 注册表路径: System\CurrentControlSet\Control\ProductOptionsSystem\CurrentControlSet\Contro ...