#!/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. 物体检测丨浅析One stage detector「YOLOv1、v2、v3、SSD」

    引言 之前做object detection用到的都是two stage,one stage如YOLO.SSD很少接触,这里开一篇blog简单回顾该系列的发展.很抱歉,我本人只能是蜻蜓点水,很多细节也 ...

  2. IO缓冲流

    目录 IO缓冲流 缓冲流 基本原理 字节缓冲流 字符缓冲流 IO缓冲流 缓冲流也叫高效流,能够更高效的进行读取: 转换流:能够进行编码转换 序列化流:持久化存储对象 缓冲流 缓冲流--就是对应4个Fi ...

  3. Spring注解之@Lazy注解,源码分析和总结

    一 关于延迟加载的问题,有次和大神讨论他会不会直接或间接影响其他类.spring的好处就是文档都在代码里,网上百度大多是无用功. 不如,直接看源码.所以把当时源码分析的思路丢上来一波. 二 源码分析 ...

  4. AnyCAD在医疗中的应用

    void addPoint(List<float> buffer, Vector3 pt) { buffer.Add((float)pt.X); buffer.Add((float)pt. ...

  5. Ubuntu上安装Samba服务器实现家庭共享

    如何在Ubuntu上安装Samba服务器 大多数Linux发行版都包含Samba. 要在Ubuntu上安装Samba,只需运行: sudo apt install samba 要检查您的Samba版本 ...

  6. Java的HashMap和HashTable(转)

    来源:http://www.cnblogs.com/devinzhang/archive/2012/01/13/2321481.html 1. HashMap 1)  hashmap的数据结构 Has ...

  7. h5新增属性本地存储

    ---恢复内容开始--- 存储的两种类型: localStorage 和 sessionStorage localstorage:没有时间限制的数据存储 sessionStorage  针对一个ses ...

  8. C#添加删除防火墙例外(程序、端口)

    一. 添加 COM 引用 在引用里,选择 COM 页, 找到 NetFwTypeLib , 确定即可 二. 添加允许通过防火墙的例外程序 using System; using System.Coll ...

  9. java 多线程的经验总结

    什么是线程? 线程是操作系统所能运算调度的最小单元,包含于进程之中,作为进程的实际运作单位:线程与进程的区别,线程是进程的子集,一个进程可以有多个线程,每个线程并行执行不同的任务,不同的进程使用不同的 ...

  10. chrome中清除dns缓存

    chrome中清除dns缓存 http://rss.code-mire.com/item/1005.htm web开发经常要做各种host绑定的切换,firefox下有个DNS Flusher插件,但 ...