迭代器_iter_,生成器yeild,三元运算,列表解析(十三)
迭代器:
l = [1, 2, 3, 4]
iter = l.__iter__()
print(iter)
print(iter.__next__())
print(iter.__next__())
print(iter.__next__())
print(iter.__next__())
'''
<list_iterator object at 0x0217A230>
1
2
3
4
'''
生成器:这种数据类型自动实现了迭代器协议,其他数据类型要调用内部的iter方法,
所以生成器就是可迭代对象
python中有两种方式提供生成器
1.生成器函数:用yield代替return函数返回,yield
一次返回一个结果,在每个结果中间挂起函数状态,
以便下一次从它离开的地方继续执行
2.生成器表达式:类似于列表推导,但是,生成器返回按需
产生的一个对象,而不是一次构建一个结果列表
def test():
yield 1
yield 2
iter = test()
print(iter)
print(iter.__next__())
print(iter.__next__())
'''
<generator object test at 0x01E96BF0>
1
2
'''
# yield 可以让函数一步一步地执行 def run():
print('runnig_1')
yield 1
print('runnig_2')
yield 2
print('runnig_3')
yield 3
print('runnig_4')
yield 4 it = run()
next(it)
print('可以做一些其他的事情...')
next(it) # 再接着执行
next(it)
next(it) '''
runnig_1
可以做一些其他的事情...
runnig_2
runnig_3
runnig_4
'''
三元表达式:
name = ‘alex’
res = ‘SB’ if name ==‘alex’ else ‘shuaige’
列表解析
l = []
for i in range(10):
l.append(i)
print(l) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 使用列表解析
l = ['第%s' %i for i in range(10)]
print(l) # ['第0', '第1', '第2', '第3', '第4', '第5', '第6', '第7', '第8', '第9']
# 加三元表达式,没有四元表达式
l1 = ['第%s' %i for i in range(10) if i > 5]
print(l1) # ['第6', '第7', '第8', '第9']
列表解析可以很方便的生成列表,但是当数据比较大时会占很大的内存,这时候使用生成器表达式就可以避免内存占用过大这个问题
生成器的第二种方式:
l = ('第%s' %i for i in range(10))
print(l.__iter__()) # <generator object <genexpr> at 0x02146C70>
print(l.__iter__().__next__())
print(l.__iter__().__next__())
print(next(l))
print(next(l))
print(next(l))
print(next(l))
print(next(l))
print(next(l))
print(next(l))
print(next(l))
print(next(l)) # 最后抛出异常
'''
<generator object <genexpr> at 0x015E6C70>
第0
第1
第2
第3
第4
第5
第6
第7
第8
第9
Traceback (most recent call last):
File "F:/Python3/demo1.py", line 165, in <module>
print(next(l))
StopIteration
'''
内置函数sum也是基于迭代器协议
print(sum( (1,2,3,4) ))
# 内置函数sum也是基于迭代器协议
l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(sum(x**2 for x in l))
print(sum( range(1000000) ))
print(sum(i for i in range(1000000) ))
迭代器_iter_,生成器yeild,三元运算,列表解析(十三)的更多相关文章
- python迭代器 生成器 三元运算 列表解析
1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大优 ...
- python的迭代器、生成器、三元运算、列表解析、生成器表达式
一 迭代的概念 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前 ...
- day13 生成器 三元运算 列表解析
本质上来说生成器迭代器都是一种数据类型,如果你直接打印生成器是无法得出值的,会得到一串内存地址,即一个对象想要得到生成器的值必须要用for或者next,list等来获取 生成器生成器就是一个可迭代对象 ...
- Python开发——函数【迭代器、生成器、三元表达式、列表解析】
递归和迭代 小明问路篇解释说明 递归:小明——>小红——>小于——>小东:小东——>小于——>小红——>小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...
- Python自动化运维之7、生成器、迭代器、列表解析、迭代器表达式
迭代器和生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外 ...
- 3、Python迭代器、列表解析及生成器(0530)
1.动态语言 sys.getrefcount() //查看对象的引用计数 增加对象的引用计数场景 对象创建时:以赋值的方式,创建变量名的同时就会创建变量 将对象添加进容器时:类似list.app ...
- Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器
一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立: val = 1 else: val = 2 改成三元运算 val = 1 if 条件成立 else ...
- Python 迭代器和列表解析
Python 迭代器和列表解析 1)迭代器 一种特殊的数据结构,以对象形式存在 >>> i1 = l1.__iter__() >>> i1 = iter(l1) 可 ...
- 文件处理,三元操作符,seek()函数,迭代函数和列表解析,reduce函数
1.文件读取方类型 r,r+,w,x,a, r,读文件 w,写文件,文件内容全部删除,并将新内容从第一行开始赋值 x,写文件,只有文件不存在,可写,文件存在,报错 a,在文件莫问追加信息 r+,w+, ...
随机推荐
- Apache之Rewrite和RewriteRule规则梳理以及http强转https的配置总结
一. 简单实例介绍一般来说,apache配置好http和https后,如果想要做http强转到https,需要设置url重定向规则,大致需要下面几个步骤即可完成配置: 1)在httpd.conf文件里 ...
- SQL中not in 和not exists
在SQL中倒是经常会用到子查询,而说到子查询,一般用的是in而不是exists,先不谈效率问题,就先说说会遇到哪些问题. 用到in当取反的时候,肯定先想到的就是not in.但是在使用not in的时 ...
- 作用域&作用域链和with,catch语句&闭包
作用域(函数) 作用域:变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期; 在一些类C编程语言中花括号内的每一段代码都有各自的作用域,而且变量在声明它们的代码段外是不可见的,称之为块 ...
- Adobe Photoshop CC 2015使用及扩展工具
VAdobe Photoshop CC 2015: 简称"PS",是由Adobe Systems开发和发行的图像处理软件 扩展工具: Cuuterman:切图插件: 一个一个切图, ...
- C. Make It Equal
链接 [http://codeforces.com/contest/1065/problem/C] 题意 给你n个高度hi的塔,让你把高的部分切掉,使得最后所有塔一样高,而且每次切的高度之和不大于k ...
- wordcount程序中的应用与拓展
设计思路: 关键是思路,首先知道 单词, 行,字符, 他们有什么特点: 1.单词,标准的是遇到空格后,单词数,自动加一. 2.行是以\n结束的, 也就是说, 遇到\n行数加一,当然也视你的操作系统而言 ...
- 12.17 Daily Scrum
Today's Task Tomorrow's Task 丁辛 实现和菜谱相关的餐厅列表. 实现和菜谱相关的餐厅列表. 邓亚梅 美化搜索框UI. 美 ...
- 第七次Scrum meeting
第七次Scrum meeting 任务及完成度: 成员 12.26 12.27 陈谋 任务1040:完成stackoverflow的数据处理后的json处理(98%) 任务1114-1:完成对网页数 ...
- Linux内核第六节 20135332武西垚
如何描述一个进程:进程描述符的数据结构: 如何创建一个进程:内核是如何执行的,以及新创建的进程从哪里开始执行: 使用gdb跟踪新进程的创建过程. 进程的描述 操作系统三大功能: 进程管理(最核心最基础 ...
- java学习--第50天讲到jquery
4月4日jquery讲完了. jquery组合选择器 逗号隔开 层级选择器 父元素 子元素,直接子元素和间接子元素,空格隔开. 直接后代选择器: 父元素>子元素 选择的直接子元素 下 ...