美文网首页Python新世界
关于python中可迭代对象和迭代器的一些理解!

关于python中可迭代对象和迭代器的一些理解!

作者: 919b0c54458f | 来源:发表于2018-12-15 10:49 被阅读1次

很多 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 进行下标迭代

jinqun1:960410445  即可获取数十套PDF哦!

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() 函数将可迭代的转换为迭代器

相关文章

  • Python12--迭代器

    1.迭代器 要理解迭代器,首先需要明白迭代器和可迭代对象的区别。一个一个读取、操作对象称为迭代,Python 中,...

  • Python中的可迭代对象和迭代器对象

    Python中的可迭代对象和迭代器对象是两种不同的东西,可迭代对象是Iterable,迭代器对象是Iterator...

  • [笔记]可迭代对象、迭代器、生成器

    为了更深入一点理解可迭代对象和迭代器,读了几篇不错的文章: Python实践18-可迭代对象和迭代器 - 曾月天的...

  • 生成器与迭代器

    一:可迭代对象(Iterable) 1、什么叫可迭代对象? 2、python中那些是可迭代对象 二:迭代器(Ite...

  • 理解迭代器/生成器

    完全理解Python 迭代对象、迭代器、生成器 迭代和生成操作总结 Python迭代器 http://www.ji...

  • Python中的迭代器和生成器

    今天我们来学习下Python中的迭代器和生成器。 迭代和可迭代对象 在学习迭代器之前,我们需要了解下迭代和可迭代对...

  • Python基础-16生成器-迭代器

    16.生成器-迭代器     可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象,在Python中提供...

  • Python进阶——什么是迭代器?

    Python进阶——什么是迭代器? 在 Python 开发中,我们经常听到有关「容器」、「迭代器」、「可迭代对象」...

  • 迭代器和生成器 (Iterator & Generator)

    迭代器 迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和n...

  • python迭代器生成器

    首先理解几个概念,迭代、可迭代对象、迭代器。 1. 迭代器 迭代(Iteration):按顺序访问线性结构中的每一...

网友评论

    本文标题:关于python中可迭代对象和迭代器的一些理解!

    本文链接:https://www.haomeiwen.com/subject/zknohqtx.html