#!/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. URLConnection简单使用

    1 --get提交 //资源url地址 URL url = new URL("http://localhost:8080/test/TestServlet?id=10"); //获 ...

  2. 详细介绍VO(值对象)和PO(持久对象)的区别

    VO,值对象(Value Object),PO,持久对象(Persisent Object),它们是由一组属性和属性的get和set方法组成.从结构上看,它们并没有什么不同的地方.但从其意义和本质上来 ...

  3. <Linux系统minfo命令用法>

    minfo命令——ms-dos文件系统的各项参数的显示 minfo这个指令主要用于显示MS-DOS文件系统的各项参数,包括扇区数.磁头数.柱面数等. 参数主要有以下几个: -v 显示详细的参数 dri ...

  4. 使用URLRewriter实现URL重写

    优点 1)隐藏真实URL,提高安全性 2)更加友好的URL,好记(看博客园就行知道啦) 3)便于搜素引擎收录 ......... 可能的缺点 使用URL重写可能导致: 1)图片路径的问题 2)CSS路 ...

  5. C#简单代码转移数据库数据

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data;u ...

  6. flask--数据库连接--URL

    使用URL制定数据库 数据库引擎 URL MySQL mysql://username:password@hostname/database Postgres postgresql://usernam ...

  7. 什么是SpringBoot

    随着动态语言的流行(Ruby,Groovy,Scala,Node.js),Java的开发显得格外的笨重;繁多的配置,低下的开发效率,复杂的部署流程以及第三方技术集成难度大. 在上述环境 下,Sprin ...

  8. Hibernate笔记3--多表操作-导航查询

    一.一对多操作 1.构造实体类及编写配置文件:     一方:  // 一个Customer对应多个linkman private Set<Linkman> linkmans = new ...

  9. Python学习笔记-day1(while流程控制)

    count = 0 while True: #print('count:',count) if count == 3: print('you guess over 3 times!fuck off!' ...

  10. HDU3577 线段树(区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3577 ,普通的线段树区间更新题目,较简单. 相当于一个区间覆盖问题,有一点要注意的就是叶子节点是一个长 ...