内容简介:很多给定一个列表、元祖、字典、甚至字符串,我们使用
很多 python
教程中,对 python
的解释不容易理解,本文记录自己的理解和体会,是对迭代器和生成器的初步理解
一、关于迭代的认识
给定一个列表、元祖、字典、甚至字符串,我们使用 for
去遍历,这样我们叫迭代
-
1、列表的迭代
list1 = ['哈哈', '西西', '嘻嘻'] for x in list1: print(x) 复制代码
-
2、列表中需要迭代出下标使用
enumerate
list1 = ['哈哈', '西西', '嘻嘻'] for index, value in enumerate(list1): print(index, value) 复制代码
-
3、元祖和字符串的迭代与列表的类似,一样的可以使用
enumerate
进行下标迭代 -
4、字典的迭代方式一
dict1 = {'name': '张三', 'age': 20, 'gender': '男'} for item in dict1: print(item) 复制代码
-
5、字典的迭代方式二
dict1 = {'name': '张三', 'age': 20, 'gender': '男'} for key in dict1.keys(): print(key) 复制代码
-
6、字典的迭代方式三
dict1 = {'name': '张三', 'age': 20, 'gender': '男'} for value in dict1.values(): print(value) 复制代码
-
7、字典的迭代方式四
dict1 = {'name': '张三', 'age': 20, 'gender': '男'} for k, v in dict1.items(): print(k, v) 复制代码
二、可迭代与迭代器的区别
-
1、可迭代一般都可以使用
for
来遍历 -
2、迭代器不仅仅可以使用
for
遍历还可以使用next()
函数一次获取一个元素 -
3、可迭代转换迭代对象使用
iter(可迭代对象)
-
4、判断可迭代对象与迭代器的方式
from collections.abc import Iterator, Iterable # Iterable 表示可迭代对象 # Iterator 表示迭代器 list1 = [1, 2, 3] print(isinstance(list1, Iterator)) print(isinstance(list1, Iterable)) print(isinstance(iter(list1), Iterator)) 复制代码
-
5、集合数据类型如
list
、dict
、str
等是Iterable
但不是Iterator
,不过可以通过iter()
函数获得一个Iterator
对象
三、自己实现一个可迭代的对象
-
1、方式一(在类中实现
__getitem__
魔法函数)from collections.abc import Iterator, Iterable class Company(object): def __init__(self, employee_list): self.employee = employee_list def __getitem__(self, item): return self.employee[item] if __name__ == "__main__": company = Company(['张三', '李四', '王五']) print(isinstance(company, Iterable)) print(isinstance(company, Iterator)) print(isinstance(iter(company), Iterator)) for item in company: print(item) 复制代码
-
2、方式二(在类中实现
__iter__
魔法函数,需要结合__next__
魔法函数) 其实已经是迭代器from collections.abc import Iterator, Iterable class Company(object): def __init__(self, employee_list): self.employee = employee_list self.index = 0 def __iter__(self): return self def __next__(self): try: current_val = self.employee[self.index] except IndexError: raise StopIteration self.index += 1 return current_val if __name__ == "__main__": company = Company(['张三', '李四', '王五']) print(isinstance(company, Iterable)) print(isinstance(company, Iterator)) for item in company: print(item) 复制代码
-
3、总结
-
1.
iter
内置函数会调用__iter__
魔法函数,如果没有__iter__
魔法函数就会去调用__getitem__
魔法函数 -
通过
isinstance(company, Iterable)
判断对象是否可迭代 -
通过
isinstance(company, Iterator)
判断对象是否为迭代器 -
可迭代器对象不代表是迭代器,但是可以通过
iter()
函数将可迭代的转换为迭代器
-
1.
以上所述就是小编给大家介绍的《关于python中可迭代对象和迭代器的一些理解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 可迭代对象,迭代器(对象),生成器(对象)
- 浅谈python可迭代对象,迭代器
- 搞清楚 Python 的迭代器、可迭代对象、生成器
- 深入理解python的迭代器,生成器,可迭代对象区别
- JavaScript深度迭代遍历未知对象
- ndarray可迭代对象,函数,运算
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java技术手册(第6版)
Benjamin J Evans、David Flanagan / 安道 / 人民邮电出版社 / 2015-12-1 / 79.00
《Java技术手册 第6版》为《Java 技术手册》的升级版,涵盖全新的Java 7 和Java 8。第1部分介绍Java 编程语言和Java 平台,主要内容有Java 环境、Java 基本句法、Java 面向对象编程、Java 类型系统、Java的面向对象设计、Java 实现内存管理和并发编程的方式。第2部分通过大量示例来阐述如何在Java 环境中完成实际的编程任务,主要内容有编程和文档约定,使......一起来看看 《Java技术手册(第6版)》 这本书的介绍吧!