python3 迭代器
'''
总结:
Iterable: 可迭代对象,有__iter__()方法
Iterator: 迭代器,有__iter__()和__next__()方法
迭代器的特点:
1.节省内存。
2.惰性机制。
3.不能反复,只能向下执行。
'''
str1 = "hello"
for s in str1:
print(s)
'''
h
e
l
l
o
'''
int1 = 123
for i in int1:
print(i) # TypeError: 'int' object is not iterable
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-8c7f77a7214a> in <module>()
1 int1 = 123
----> 2 for i in int1:
3 print(i) TypeError: 'int' object is not iterable
'''dir函数'''
dir(list)
['__add__',
'__class__',
'__contains__',
'__delattr__',
'__delitem__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__getitem__',
'__gt__',
'__hash__',
'__iadd__',
'__imul__',
'__init__',
'__init_subclass__',
'__iter__',
'__le__',
'__len__',
'__lt__',
'__mul__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__reversed__',
'__rmul__',
'__setattr__',
'__setitem__',
'__sizeof__',
'__str__',
'__subclasshook__',
'append',
'clear',
'copy',
'count',
'extend',
'index',
'insert',
'pop',
'remove',
'reverse',
'sort']
print("__iter__" in dir(int)) # False
print("__iter__" in dir(bool)) # False
print("__iter__" in dir(str)) # True
print("__iter__" in dir(list)) # True
print("__iter__" in dir(set)) # True
print("__iter__" in dir(tuple)) # True
print("__iter__" in dir(dict)) # True
'''isinstance()函数可以查看一个对象是什么类型
iterable 迭代对象
iterator 迭代器
'''
lst = ["apple", "banana", "orange"]
lst_iter = lst.__iter__() # 迭代对象.__iter__()会生成一个迭代器
from collections import Iterable, Iterator
print(isinstance(lst, Iterable)) # True
print(isinstance(lst_iter, Iterable)) # True
print(isinstance(lst, Iterator)) # False
print(isinstance(lst_iter, Iterator)) # True
str1 = "hello"
str_iter = str1.__iter__()
print(str_iter.__next__()) # 迭代器有next方法,如果拿完数据,再执行next会报StopIteration,返回结果:h
print(str1.__next__()) # 迭代对象没有next方法
h
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-18-56c2a1c77dc2> in <module>()
2 str_iter = str1.__iter__()
3 print(str_iter.__next__())
----> 4 print(str1.__next__()) AttributeError: 'str' object has no attribute '__next__'
'''for循环机制'''
for i in [1, 2, 3]:
print(i)
1
2
3
'''使用while循环+迭代器来模拟for循环'''
lst = [1, 2, 3]
lst_iter = lst.__iter__()
while 1:
try:
print(lst_iter.__next__())
except StopIteration:
break
1
2
3
'''list可以一次性把迭代器中的内容拿空,并装载在一个新列表中'''
str1 = "hello".__iter__()
print(list(str1)) # ['h', 'e', 'l', 'l', 'o']
python3 迭代器的更多相关文章
- Python3+迭代器与生成器
转载Python3 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素 ...
- python014 Python3 迭代器与生成器
Python3 迭代器与生成器迭代器迭代是Python最强大的功能之一,是访问集合元素的一种方式..迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结 ...
- python3 迭代器(Iterator)和生成器(generator)
一.迭代器定义: 迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历位置的对象: 集合数据类型如list.dict.str等是Iterable但不是Iterator,不过可以通过iter()函数获 ...
- Python3迭代器与生成器
迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...
- python3: 迭代器与生成器(1)
1. 手动遍历迭代器 你想遍历一个可迭代对象中的所有元素,但是却不想使用for循环. >>> items = [1, 2, 3] >>> # Get the ite ...
- python3迭代器和生成器
1.手动访问迭代器中的元素 #要手动访问迭代器中的元素,可以使用next()函数 In [3]: with open('/etc/passwd') as f: ...: try: ...: while ...
- Python3 迭代器和生成器
想要搞明白什么是迭代器,首先要了解几个名词:容器(container).迭代(iteration).可迭代对象(iterable).迭代器(iterator).生成器(generator). 看图是不 ...
- Python3 迭代器,生成器,装饰器
1.迭代器 迭代器有两个基本方法,iter()和next(),next()完成后会引发StopIteration异常 a='abcdef' b=iter(a) #创建迭代器对象 print(type( ...
- python3 迭代器,生成器
一 .什么是迭代 1. 重复 2.下次重复一定是基于上一次的结果而来 while True: cmd=input(':') print(cmd) l=[1,2,3,4] count=0 while c ...
随机推荐
- markdown 语法指南
说明:左边是markdown的语法 右边是预览.(我这里用了黑色的背景,一般白色较多) 1. 标题 2.列表 3.引用 (1)一层引用 (2)多层引用 4.图片(如果是本地:按照语法写图片路径:如果是 ...
- @RequestBody Spring MVC 示例
1.前端的访问请求 <script type="text/javascript"> $(document).ready(function(){ var saveData ...
- SAP MM 物料主数据MRP2 视图Rounding Value字段
SAP MM 物料主数据MRP2 视图Rounding Value字段 如下物料号,MRP2视图中,维护了rounding value字段值为50. MRP type :PD Lot size:EX ...
- mysql之连接查询、联合查询、子查询
本文内容: 连接查询 联合查询 子查询 from子查询 where子查询 exists子查询 首发日期:2018-04-11 连接查询: 连接查询就是将多个表联合起来查询,连接查询方式有内连接.外连接 ...
- 手把手教你全家桶之React(三)--完结篇
前言 本篇主要是讲一些全家桶的优化与完善,基础功能上一篇已经讲得差不多了.直接开始: Source Maps 当javaScript抛出异常时,我们会很想知道它发生在哪个文件的哪一行.但是webpac ...
- 如何定位那些SQL产生了大量的redo日志
在ORACLE数据库的管理.维护过程中,偶尔会遇到归档日志暴增的情况,也就是说一些SQL语句产生了大量的redo log,那么如何跟踪.定位哪些SQL语句生成了大量的redo log日志呢? 下面这篇 ...
- java----鲁棒性
所谓“鲁棒性”,是指控制系统在一定(结构,大小)的参数摄动下,维持其它某些性能的特性. Java鲁棒性的特点如下: Java在编译和运行程序时都要对可能出现的问题进行检查,以防止错误的产生. Java ...
- 最简单的java浏览器
/** * Created by Admin on 2017/3/27. */ import java.awt.BorderLayout; import java.awt.Container; imp ...
- Vue2 学习笔记1
什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App,Vue语法也是可以用于进行手机App开发的,需要借助于Wee ...
- c/c++ 数组 数组的引用,指针数组的引用
c/c++ 数组 知识点 1,数组的声明和初始化,对应代码里的test1和test2 2,char数组,对应代码里的test3 3,数组不可以拷贝和复制,对应代码里的test4 4,指针数组, 数组的 ...