day13 生成器 三元运算 列表解析
本质上来说生成器迭代器都是一种数据类型,如果你直接打印生成器是无法得出值的,会得到一串内存地址,即一个对象想要得到生成器的值必须要用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 生成器 三元运算 列表解析相关推荐
- 三元表达式列表解析生成器表达式
三元表达式 列表解析 生成器表达式 三元表达式 在作简单的判断时,三元表达式能简化代码: def max(x, y):if x > y:return xelse:return y # 这个函数可 ...
- 4 三元表达式 列表解析 生成器表达式
三元表达式 #!/usr/bin/env python3 # _*_ coding:utf-8 _*_ # @File : 三元表达式 # @Version : 1.0'''三元表达式能实现简单的 i ...
- python二十二:迭代,三元表达式,列表解析
迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代(只能往后走,不能往前退) 可迭代对象:实现了迭代器协议的对象( ...
- 初学者python笔记(迭代器、生成器、三元表达式、列表解析、send()与yield())
文章目录 迭代器与for循环的关系 1. 迭代器协议 2. 可迭代对象 3. for循环的本质 4. 强大的for循环机制 5. 迭代器如何工作的 6. while循环模拟for循环与迭代器的结合 7 ...
- Python开发——函数【迭代器、生成器、三元表达式、列表解析】
递归和迭代 小明问路篇解释说明 递归:小明-->小红-->小于-->小东:小东-->小于-->小红-->小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...
- Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器...
一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立:val = 1else:val = 2 改成三元运算 val = 1 if 条件成立 else 2 ...
- 列表解析和生成器表达式
列表解析(List comprehensions,或者缩略为list comps)来自函数式编程语言Haskell,可以用来动态创建列表. [expr for iter_var in iterable ...
- 三元表达式,列表解析和生成器表达式
三元表达式 在以前,在诸如比较两个数大小的时候,通常的写法都是下面的样子 if x > y:print("the max is x") else:print("th ...
- python 三元运算、列表推倒式、字典推倒式、生成器生成式
1.三元运算 name=input('姓名>>: ') res='SB' if name == 'alex' else 'NB' print(res) 2.列表推倒式 #1.示例 egg_ ...
最新文章
- find name 模糊匹配_Linux的文件搜索命令(locate ,find,grep,find命令和)
- 随笔 —— 当下不晚
- NSLog中格式符列表
- informatica数据脱敏_助您首个大数据项目破茧成蝶的实践指南
- 无码系列-7-代码的语文修养_上篇
- Mac实用技巧:怎样使用终端在macOS Big Sur Finder中锁定文件!
- 在一个字符串中找到第一个只出现一次的字符, 并返回它的位置
- php怎么用origin打开,[转载]origin 使用技巧 (4)
- 缺陷管理工具JIRA和禅道对比
- 红胖子创业一年整总结:前二十年题记,萌芽初期,外包初期,创业初期,未来规划
- 【数据挖掘】搜狐公司数据挖掘工程师笔试题
- 苹果4s手机装 java微信_苹果4s版本过低不能下载微信怎么安装旧版本的
- 数独算法c语言,数独求解算法C.
- 微服架构基础设施环境平台搭建 -(一)基础环境准备
- 阿里云无影研发负责人任晋奎:无影核心技术能力突破,打造云网端融合的全新体验
- 18.多级页表与快表
- html兴趣测试生成图表源码,用 Pytest+Allure 生成漂亮的 HTML 图形化测试报告
- 管理员账户没有系统维护权限处理办法
- matlab thd 论坛,matlab如何仿真thd
- it转正述职报告_it转正述职报告
热门文章
- php substr函数的用法6,PHP中substr函数如何使用?
- mysql的for循环_MySQL中的For循环示例
- 20220129刷题--第4题-- cookie
- python2.7安装pip_python2.7 安装pip的方法步骤(管用)
- Linux最终将会领先于Windows、Mac OS!
- 20155220吴思其 实验2 Windows口令破解
- Application.mk
- 网上看到的一道题,分享一下
- IOS15自定义UICollectionView的使用
- c语言程序阅读题库,C语言程序设计-阅读程序题库及答案.doc-资源下载在线文库www.lddoc.cn...