python的迭代、可迭代、迭代器有哪些区别

发布时间:2021-11-25 13:42:01 作者:iii
来源:亿速云 阅读:213

这篇文章主要讲解了“python的迭代、可迭代、迭代器有哪些区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python的迭代、可迭代、迭代器有哪些区别”吧!

一、基本概念

迭代(Iteration)动词,是指通过遍历获取某容器内所有元素,特指遍历获取这个动作。

可迭代 (iterable)形容词,是指某容器可被遍历获取内部所有元素,特指容器内元素可被遍历获取的特性。

在python中包含__iter__方法的对象就是可迭代的。

迭代器 (iterator)名词,特指某种特殊的容器,该容器内所有元素可通过__next__方法依次获取

在python中包含__iter__方法和__next__方法的对象就是迭代器。

python的迭代、可迭代、迭代器有哪些区别

二、区分可迭代对象与迭代器的方法

  1. 判断一个对象是可迭代对象,可以通过查看该对象是不是有__iter__方法和__getitem__方法来鉴别。

# 字符串:可迭代对象
s1 = '努力学python,坚持认真学python'
print('*' * 10, '判断字符串iter、getitem、next', '*' * 10)
print('iter:', '__iter__' in dir(s1))
print('getitem:', '__getitem__' in dir(s1))
print('next:', '__next__' in dir(s1))
# 列表:可迭代对象
l1 = [i for i in range(10)]
print('*' * 10, '判断列表iter、getitem、next', '*' * 10)
print('iter:', '__iter__' in dir(l1))
print('getitem:', '__getitem__' in dir(l1))
print('next:', '__next__' in dir(l1))

out:
********** 判断字符串iter、getitem、next **********
iter: True
getitem: True
next: False
********** 判断列表iter、getitem、next **********
iter: True
getitem: True
next: False
  1. 判断一个对象是不是迭代器,可以通过查看该对象是不是有__iter__方法和__next__方法来鉴别。

# 字符串迭代器
s2 = iter(s1)
print('*' * 10, '判断字符串迭代器iter、getitem、next', '*' * 10)
print('iter:', '__iter__' in dir(s2))
print('getitem:', '__getitem__' in dir(s2))
print('next:', '__next__' in dir(s2))
# 列表迭代器
l2 = iter(l1)
print('*' * 10, '判断列表迭代器iter、getitem、next', '*' * 10)
print('iter:', '__iter__' in dir(l2))
print('getitem:', '__getitem__' in dir(l2))
print('next:', '__next__' in dir(l2))

out:
********** 判断字符串迭代器iter、getitem、next **********
iter: True
getitem: False
next: True
********** 判断列表迭代器iter、getitem、next **********
iter: True
getitem: False
next: True
  1. 可以自定义一个简单的lambda表达式来判断是可迭代对象还是迭代器。

is_er = lambda x: '__iter__' in dir(x) and '__getitem__' in dir(x)
is_or = lambda x: '__iter__' in dir(x) and '__next__' in dir(x)
s1 = '努力学python,坚持认真学python'
s2 = iter(s1)

print('s1是可迭代对象吗?', is_er(s1))
print('s1是迭代器吗?', is_or(s1))
print('s2是可迭代对象吗?', is_er(s2))
print('s2是迭代器吗?', is_or(s2))

out:
s1是可迭代对象吗? True
s1是迭代器吗? False
s2是可迭代对象吗? False
s2是迭代器吗? True

三、可迭代对象与迭代器的优劣比较

可迭代对象的优点:

  1. 访问速度快。

  2. 访问方式灵活,可多次、重复、任意选择范围访问。

  3. 内置方法和函数比较多。

可迭代对象的缺点:

  1. 耗费内存。

  2. 取值过于灵活(有时会引起报错,如index out of range、TypeError等)。

迭代器的优点:

  1. 节省内存。

  2. 惰性取值(一次固定取一条数据,直到取值完毕报StopIteration,不会引发报错)。

迭代器的缺点:

  1. 访问速度慢。

  2. 访问方式死板,只能访问下一条不能访问上一条。

  3. 内置方法和函数比较少。

四、可迭代对象与迭代器如何抉择

感谢各位的阅读,以上就是“python的迭代、可迭代、迭代器有哪些区别”的内容了,经过本文的学习后,相信大家对python的迭代、可迭代、迭代器有哪些区别这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. 搞懂python中的可迭代对象和迭代器对象(即迭代器)
  2. 迭代器和可迭代协议

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:web前端中保持网站关键字排名稳定的方法是什么

下一篇:创建交互式图表的Python库有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》