Python 中的 `iter` 函数

发布于:2025-02-11 ⋅ 阅读:(85) ⋅ 点赞:(0)

因为在jax的代码接触了这个函数,不是很熟悉,每次看见名字只知道是迭代但是不知道是怎么迭代,因此写下以下笔记提醒自己。

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

Python 中的 iter 函数

在 Python 编程中,iter 函数是一个非常有用的内置函数,用于创建迭代器对象。迭代器是一种允许你遍历集合(如列表、元组、字典等)中的元素的对象。iter 函数有两种主要用法:

  1. iter(iterable) -> iterator
    这种形式接受一个可迭代对象(如列表、元组、字典等),并返回一个迭代器。迭代器可以用来遍历可迭代对象的元素。

    例如:

    my_list = [1, 2, 3, 4, 5]
    iterator = iter(my_list)
    
    print(next(iterator))  # 输出:1
    print(next(iterator))  # 输出:2
    
  2. iter(callable, sentinel) -> iterator
    这种形式接受一个可调用对象(如函数)和一个哨兵值。它会调用可调用对象,直到返回哨兵值。

    例如:

    import random
    
    def my_callable():
        return random.randint(1, 10)
    
    iterator = iter(my_callable, 5)
    
    print(next(iterator))  # 输出:1 到 10 之间的随机整数
    print(next(iterator))  # 输出:1 到 10 之间的随机整数
    

假设 my_callable 函数返回的随机数序列是 [3, 7, 5, 2, 8],那么代码的输出可能是:

print(next(iterator))  # 输出:3
print(next(iterator))  # 输出:7

当 my_callable 函数返回 5 时,迭代器会停止,因为 5 是哨兵值。

自定义 iter 函数

为了更好地理解 iter 函数的工作原理,我们可以实现一个简单的自定义版本:

def iter(source, sentinel=None):
    if sentinel is None:
        # Form 1: iter(iterable)
        return source.__iter__()
    else:
        # Form 2: iter(callable, sentinel)
        while True:
            value = source()
            if value == sentinel:
                break
            yield value

网站公告

今日签到

点亮在社区的每一天
去签到