加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-17 00:30:10 所属栏目:Python 来源:网络整理
导读:很多 python 教程中,对 python 的解释不容易理解,本文记录自己的理解和体会,是对迭代器和生成器的初步理解 一、关于迭代的认识 给定一个列表、元祖、字典、甚至字符串,我们使用 for 去遍历,这样我们叫迭代 1、列表的迭代 list1 = ['哈哈','西西','嘻嘻']f

很多 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、字典的迭代方式二
进群:960410445  即可获取数十套PDF哦!
dict1 = {'name': '张三','gender': '男'}
for key in dict1.keys():
 print(key)
  • 6、字典的迭代方式三
dict1 = {'name': '张三','gender': '男'}
for value in dict1.values():
 print(value)
  • 7、字典的迭代方式四
dict1 = {'name': '张三','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,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(['张三',Iterator))
for item in company:
print(item)

  • 3、总结
  • 1. iter 内置函数会调用 __iter__ 魔法函数,如果没有 __iter__ 魔法函数就会去调用 __getitem__ 魔法函数
  • 通过 isinstance(company,Iterable) 判断对象是否可迭代
  • 通过 isinstance(company,Iterator) 判断对象是否为迭代器
  • 可迭代器对象不代表是迭代器,但是可以通过 iter() 函数将可迭代的转换为迭代器

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读