Python内置函数--必须了解的iter()与next()

简介: Python内置函数--必须了解的iter()与next()

前言

iter():此函数获取一个对象并返回与该参数对应的迭代器对象。next():此函数使用迭代器并返回输入中的下一个元素。如果我们再次调用它,它会记住之前返回的值并输出下一个值。

看到了迭代器对象,那么就不得不看看魔术方法__iter__()了。只要内置有__iter__()方法的就可以称之为可迭代对象。可以转换为迭代器的对象,就称之为可迭代对象。

list_ = [1,2,3,4]
tuple_ = (1,2,3,4)
dict_ = {"name1":"清安","name2":"拾贰"}
list_.__iter__()
tuple_.__iter__()
dict_.__iter__()

列举了三个数据结构,都带有__iter__()方法(不只三种)。所以:

list_ = [1,2,3,4]
list_res = list_.__iter__()
print(list_res)
"""<list_iterator object at 0x0000029DF0C9FEE0>"""

这个列表也就成功变成了一个迭代器。

__iter__()与iter()有什么关系?

def iter(source, sentinel=None): # known special case of iter
    """
    iter(iterable) -> iterator
    iter(callable, sentinel) -> iterator
    Get an iterator from an object.  In the first form, the argument must
    supply its own iterator, or be a sequence.
    In the second form, the callable is called until it returns the sentinel.
    """
    pass
def __iter__(self, *args, **kwargs): # real signature unknown
        """ Implement iter(self). """
        pass

本质作用都是一样的。将可迭代对象转为迭代器对象。所以可以这样写:

list_ = [1,2,3,4]
tuple_ = (1,2,3,4)
list_res = list_.__iter__()
print(list_res)
print(iter(tuple_))
"""
<list_iterator object at 0x000001FE485CFEE0>
<tuple_iterator object at 0x000001FE485CFEB0>
"""

取值问题

list_ = [1,2,3,4]
print(next(list_))

这样会告诉你:TypeError: 'list' object is not an iterator,类型错误,列表对象不是迭代器。所以要想使用next()取值就必须先iter()。

list_ = [1,2,3,4]
res_list = iter(list_)
print(next(res_list))
print(next(res_list))
print(next(res_list))
print(next(res_list))
print(next(res_list))

取一次值就next一次,下一次使用next会接着上一次的位置取值。当超出后会告诉你:StopIteration停止迭代。

__next__()与next()有什么关系?

def next(iterator, default=None): # real signature unknown; restored from __doc__
    """
    next(iterator[, default])
    Return the next item from the iterator. If default is given and the iterator
    is exhausted, it is returned instead of raising StopIteration.
    """
    pass
list_ = [1,2,3,4]
res_list = iter(list_)
print(next(res_list))
print(res_list.__next__())

本质作用都是一样的,迭代取值。

while与for

迭代器就是一个重复取值的工具。那么while,for似乎都是类似的作用。

list_ = [1,2,3,4]
res_list = iter(list_)
while True:
    print(next(res_list))

这样就简化了每次都要写next的情况。但是依旧会抛出异常StopIteration。

list_ = [1,2,3,4]
for value in iter(list_):
    print(value)

而for循环却不会。要想while不抛出异常我们可以用try来捕捉异常达到预期的效果。至于for循环:看到了吗,for循环本质就是使用了iter,所以即使不使用iter()直接使用for value in list_也是可以的。为什么不抛出异常,应为for循环以及帮我们做了对应的操作了。

目录
相关文章
|
2月前
|
Python
【python从入门到精通】-- 第五战:函数大总结
【python从入门到精通】-- 第五战:函数大总结
90 0
|
27天前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
126 67
|
20天前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
44 18
|
12天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
41 8
|
21天前
|
Python
Python中的函数
Python中的函数
34 8
|
28天前
|
监控 测试技术 数据库
Python中的装饰器:解锁函数增强的魔法####
本文深入探讨了Python语言中一个既强大又灵活的特性——装饰器(Decorator),它以一种优雅的方式实现了函数功能的扩展与增强。不同于传统的代码复用机制,装饰器通过高阶函数的形式,为开发者提供了在不修改原函数源代码的前提下,动态添加新功能的能力。我们将从装饰器的基本概念入手,逐步解析其工作原理,并通过一系列实例展示如何利用装饰器进行日志记录、性能测试、事务处理等常见任务,最终揭示装饰器在提升代码可读性、维护性和功能性方面的独特价值。 ####
|
1月前
|
Python
Python中的`range`函数与负增长
在Python中,`range`函数用于生成整数序列,支持正向和负向增长。本文详细介绍了如何使用`range`生成负增长的整数序列,并提供了多个实际应用示例,如反向遍历列表、生成倒计时和计算递减等差数列的和。通过这些示例,读者可以更好地掌握`range`函数的使用方法。
53 5
|
2月前
|
Python
Python之函数详解
【10月更文挑战第12天】
Python之函数详解
|
2月前
|
存储 数据安全/隐私保护 索引
|
1月前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。