高频面试题之Python迭代器和迭代对象的区别

简介: 首先有很多开发者是不太在意这个问题的, 因为无论是**迭代器(Iterator)**还是**迭代对象(Iterable)**都不影响我们循环遍历的使用, 再加上名字区别不大, 很多人将这两个东西认为是一个东西, 但是如果面试官单独提出这问题了, 那我们就必须细化区分这2个东西了

高频面试题之Python迭代器和迭代对象的区别

本章从以下三点入手:
  • 1.什么是迭代对象?
  • 2.什么是迭代器?
  • 3.迭代器和迭代对象的区别

1. 迭代对象--Iterable

在python复合数据类型中: 列表(list), 元组(tuple),字典(dict), 集合(set), 字符串(string) 这些都是 迭代对象

从定义上来讲: 凡是 类Class 内部实现了 **__iter__** 方法, 实例化的对象都称之为迭代对象

from collections.abc import Iterable

print("list1是不是迭代对象:", isinstance([1, 2, 3], Iterable))
print("tuple1是不是迭代对象:", isinstance((1, 2, 3), Iterable))
print("set1是不是迭代对象:", isinstance({1, 2, 3}, Iterable))
print("dict1是不是迭代对象:", isinstance({'type': '迭代对象'}, Iterable))
print("str1是不是迭代对象:", isinstance('diedaiduixiang', Iterable))

-- list1是不是迭代对象: True
-- tuple1是不是迭代对象: True
-- set1是不是迭代对象: True
-- dict1是不是迭代对象: True
-- str1是不是迭代对象: True
from collections.abc import Iterable, Iterator


class CustomClass(object):
    def __init__(self):
        self.name = '迭代对象'

    def __iter__(self):
        pass

obj = CustomClass()
print("判断对象是否是迭代对象:", isinstance(obj, Iterable))
print("判断对象是否是迭代器:", isinstance(obj, Iterator))
print("查看对象类型:", type(obj))


-- 判断对象是否是迭代对象: True
-- 判断对象是否是迭代器  : Flase
-- 查看对象类型: <class '__main__.CustomClass'>

2. 迭代器-Iterator

从定义上来讲: 凡是 类Class 内部实现了 __iter____next__方法, 实例化的对象都称之为迭代器对象

内置函数: iter(迭代对象)可以将 迭代对象转换成迭代器

内置函数: next(迭代器) 可以将 迭代器的数据逐层获取输出

from collections.abc import Iterable, Iterator


class CustomClass(object):
    def __init__(self):
        self.name = '迭代对象'

    def __iter__(self):
        pass
    def __next__(self):
        pass

obj = CustomClass()
print("判断对象是否是迭代对象:", isinstance(obj, Iterable))
print("判断对象是否是迭代器:  ", isinstance(obj, Iterator))
print("查看对象类型:", type(obj))

-- 判断对象是否是迭代对象: True
-- 判断对象是否是迭代器:   True
-- 查看对象类型: <class '__main__.CustomClass'>
from collections.abc import Iterator, Iterable

# 常用迭代对象 在这里只演示一个, 其他类型请自行测试
list1 = [1, 2, 3]

# 使用iter() 函数把 迭代对象 转换成 迭代器
iterator_list = iter(list1)

# 使用next() 函数 获取 迭代器中的数据
print('未转换前是不是迭代器:', isinstance(list1, Iterator))
print('  转换后是不是迭代器:', isinstance(iterator_list, Iterator))

print(next(iterator_list))
print(next(iterator_list))
print(next(iterator_list))

-- 未转换前是不是迭代器: False
--   转换后是不是迭代器: True
-- 1
-- 2
-- 3

3. 迭代器和迭代对象的区别

1.迭代对象和迭代器 都可以使用循环遍历

2.迭代对象和迭代器都有__iter__函数实现

3.迭代器包含了迭代对象, 换句话说迭代器一定是迭代对象

4.迭代对象不是迭代器, 因为没有__next__函数实现

5.生成器generator也是迭代器

相关文章
|
22天前
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
55 9
|
27天前
|
安全 Java 程序员
Java面试必问!run() 和 start() 方法到底有啥区别?
在多线程编程中,run和 start方法常常让开发者感到困惑。为什么调用 start 才能启动线程,而直接调用 run只是普通方法调用?这篇文章将通过一个简单的例子,详细解析这两者的区别,帮助你在面试中脱颖而出,理解多线程背后的机制和原理。
59 12
|
25天前
|
编译器 Android开发 开发者
Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
Lambda表达式和匿名函数都是Kotlin中强大的特性,帮助开发者编写简洁而高效的代码。理解它们的区别和适用场景,有助于选择最合适的方式来解决问题。希望本文的详细讲解和示例能够帮助你在Kotlin开发中更好地运用这些特性。
29 9
|
2月前
|
Java
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
今日分享的主题是如何区分&和&&的区别,提高自身面试的能力。主要分为以下四部分。 1、自我面试经历 2、&amp和&amp&amp的不同之处 3、&对&&的不同用回答逻辑解释 4、彩蛋
|
2月前
|
存储 数据处理 Python
Python如何显示对象的某个属性的所有值
本文介绍了如何在Python中使用`getattr`和`hasattr`函数来访问和检查对象的属性。通过这些工具,可以轻松遍历对象列表并提取特定属性的所有值,适用于数据处理和分析任务。示例包括获取对象列表中所有书籍的作者和检查动物对象的名称属性。
43 2
|
3月前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
107 14
|
2月前
|
缓存 监控 算法
Python内存管理:掌握对象的生命周期与垃圾回收机制####
本文深入探讨了Python中的内存管理机制,特别是对象的生命周期和垃圾回收过程。通过理解引用计数、标记-清除及分代收集等核心概念,帮助开发者优化程序性能,避免内存泄漏。 ####
64 3
|
2月前
|
Java 关系型数据库 数据库
京东面试:聊聊Spring事务?Spring事务的10种失效场景?加入型传播和嵌套型传播有什么区别?
45岁老架构师尼恩分享了Spring事务的核心知识点,包括事务的两种管理方式(编程式和声明式)、@Transactional注解的五大属性(transactionManager、propagation、isolation、timeout、readOnly、rollbackFor)、事务的七种传播行为、事务隔离级别及其与数据库隔离级别的关系,以及Spring事务的10种失效场景。尼恩还强调了面试中如何给出高质量答案,推荐阅读《尼恩Java面试宝典PDF》以提升面试表现。更多技术资料可在公众号【技术自由圈】获取。
|
3月前
|
大数据 数据处理 开发者
Python中的迭代器和生成器:不仅仅是语法糖####
本文探讨了Python中迭代器和生成器的深层价值,它们不仅简化代码、提升性能,还促进了函数式编程风格。通过具体示例,揭示了这些工具在处理大数据、惰性求值及资源管理等方面的优势。 ####
|
3月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密

热门文章

最新文章