本质上来说生成器迭代器都是一种数据类型,如果你直接打印生成器是无法得出值的,会得到一串内存地址,即一个对象想要得到生成器的值必须要用for或者next,list等来获取

生成器生成器就是一个可迭代对象本质上就是一种数据类型      表现形式有两种         生成器函数: 使用yield 代替 return,但是可以返回多次值            调用之后函数内的代码不执行,返回生成器            每从生成器中取一个值就执行一段,遇到yield就停止            如何从生成器取值:               for: 如果没有break就可一直取到最后               next:每次取一个,首次使用时激活生成器               send:不能用在第一个,取下个值会给上个位置传一个新的值               数据类型强制转换: 会一次把所有的数据读到内存中         生成器表达式            (条件成立的放在生成器的值 for i in 可迭代的 if 条件)           优点               生成器延迟计算,一次返回一个值,大数据量处理很好用               保存状态               提高代码可读性

基本的生成器函数
1 def test():
2     yield 1
3     yield 2
4     yield 3
5 g = test()
6 print(g)                # <generator object test at 0x00000000027F4E58>
7 print(g.__next__())        # 1
8 print(next(g))            # 2 

生成器的一次性
1 def test():
2     for i in range(4):
3         yield i
4 t = test()
5 t1 = (i for i in t)
6 print(list(t1))        # [0, 1, 2, 3]  生成器是第一次性的。
7 print(list(t1))        # []            生成器是第一次性的。再次使用就无法获取了

迷惑操作
1 def test():
2     for i in range(4):
3         yield i
4 t = test()
5 t1 = (i for i in t)
6 t2 = (i for i in t1)    # 生成器在产生的时候,并不会有任何的操作
7                         # 生成器是按需取值,因此一开始建立并没有使用,是无值的
8 print(list(t1))         # [0, 1, 2, 3] 生成器被遍历使用了,才会被消耗掉
9 print(list(t2))            # []

生成器表达式
1 laomuji = ("鸡蛋%s" % i for i in range(10)) # 生成器表达式
2 print(laomuji)               # <generator object <genexpr> at 0x0000000002814E58>
3 print(laomuji.__next__())   # 鸡蛋0
4 print(next(laomuji))        # 鸡蛋1


列表解析数据量比较大的时候不要用,很笨重

  原有的正常操作,比较多代码而且很啰嗦
1 egg_list = []
2 for i in range(10):
3     egg_list.append("鸡蛋%s" %i)
4 print(egg_list)

  使用列表解析后
1 l = ["鸡蛋%s" %i for i in range(5) ]
2 l1 = ["鸡蛋%s" %i for i in range(5) if i>2 ]
3 # l2 = ["鸡蛋%s" %i for i in range(10) if i>5 else i] # 不存在4元表达式
4 print(l)    # ['鸡蛋0', '鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4']
5 print(l1)    # ['鸡蛋3', '鸡蛋4']
6 # print(l2)    # SyntaxError: invalid syntax


转载于:https://www.cnblogs.com/shijieli/p/9705181.html

day13 生成器 三元运算 列表解析相关推荐

  1. 三元表达式列表解析生成器表达式

    三元表达式 列表解析 生成器表达式 三元表达式 在作简单的判断时,三元表达式能简化代码: def max(x, y):if x > y:return xelse:return y # 这个函数可 ...

  2. 4 三元表达式 列表解析 生成器表达式

    三元表达式 #!/usr/bin/env python3 # _*_ coding:utf-8 _*_ # @File : 三元表达式 # @Version : 1.0'''三元表达式能实现简单的 i ...

  3. python二十二:迭代,三元表达式,列表解析

    迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代(只能往后走,不能往前退)   可迭代对象:实现了迭代器协议的对象( ...

  4. 初学者python笔记(迭代器、生成器、三元表达式、列表解析、send()与yield())

    文章目录 迭代器与for循环的关系 1. 迭代器协议 2. 可迭代对象 3. for循环的本质 4. 强大的for循环机制 5. 迭代器如何工作的 6. while循环模拟for循环与迭代器的结合 7 ...

  5. Python开发——函数【迭代器、生成器、三元表达式、列表解析】

    递归和迭代 小明问路篇解释说明 递归:小明-->小红-->小于-->小东:小东-->小于-->小红-->小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...

  6. Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器...

    一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立:val = 1else:val = 2 改成三元运算 val = 1 if 条件成立 else 2 ...

  7. 列表解析和生成器表达式

    列表解析(List comprehensions,或者缩略为list comps)来自函数式编程语言Haskell,可以用来动态创建列表. [expr for iter_var in iterable ...

  8. 三元表达式,列表解析和生成器表达式

    三元表达式 在以前,在诸如比较两个数大小的时候,通常的写法都是下面的样子 if x > y:print("the max is x") else:print("th ...

  9. python 三元运算、列表推倒式、字典推倒式、生成器生成式

    1.三元运算 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' print(res) 2.列表推倒式 #1.示例 egg_ ...

最新文章

  1. find name 模糊匹配_Linux的文件搜索命令(locate ,find,grep,find命令和)
  2. 随笔 —— 当下不晚
  3. NSLog中格式符列表
  4. informatica数据脱敏_助您首个大数据项目破茧成蝶的实践指南
  5. 无码系列-7-代码的语文修养_上篇
  6. Mac实用技巧:怎样使用终端在macOS Big Sur Finder中锁定文件!
  7. 在一个字符串中找到第一个只出现一次的字符, 并返回它的位置
  8. php怎么用origin打开,[转载]origin 使用技巧 (4)
  9. 缺陷管理工具JIRA和禅道对比
  10. 红胖子创业一年整总结:前二十年题记,萌芽初期,外包初期,创业初期,未来规划
  11. 【数据挖掘】搜狐公司数据挖掘工程师笔试题
  12. 苹果4s手机装 java微信_苹果4s版本过低不能下载微信怎么安装旧版本的
  13. 数独算法c语言,数独求解算法C.
  14. 微服架构基础设施环境平台搭建 -(一)基础环境准备
  15. 阿里云无影研发负责人任晋奎:无影核心技术能力突破,打造云网端融合的全新体验
  16. 18.多级页表与快表
  17. html兴趣测试生成图表源码,用 Pytest+Allure 生成漂亮的 HTML 图形化测试报告
  18. 管理员账户没有系统维护权限处理办法
  19. matlab thd 论坛,matlab如何仿真thd
  20. it转正述职报告_it转正述职报告

热门文章

  1. php substr函数的用法6,PHP中substr函数如何使用?
  2. mysql的for循环_MySQL中的For循环示例
  3. 20220129刷题--第4题-- cookie
  4. python2.7安装pip_python2.7 安装pip的方法步骤(管用)
  5. Linux最终将会领先于Windows、Mac OS!
  6. 20155220吴思其 实验2 Windows口令破解
  7. Application.mk
  8. 网上看到的一道题,分享一下
  9. IOS15自定义UICollectionView的使用
  10. c语言程序阅读题库,C语言程序设计-阅读程序题库及答案.doc-资源下载在线文库www.lddoc.cn...