Python函数中创建迭代器
创建于 2024年7月25日修改于 2024年7月25日
今天我(重新)学习到内置函数 iter
有一个带两个参数的变体,它可以让你把任何没有参数的函数变成一个迭代器。iter(function, value)
会创建一个迭代器,该迭代器返回调用函数的连续返回值,直到其中一个返回值与 value
匹配,此时迭代器完成。
例如,使用 input
,我们可以创建一个循环,当用户输入内容时运行。当用户输入“exit”时,循环停止:
for user_str in iter(input, "exit"):
# 处理用户输入...
print(f"User typed {user_str!r}.")
试着将上面的代码复制并粘贴到终端 REPL 中,输入几行内容,看看循环如何运行。
Python 文档中还展示了另一种 iter
的用法示例,通过这种方式创建一个“块读取器”,例如从套接字读取块:
from functools import partial
for block in iter(partial(sock.recv, 64), b""):
# 处理 64 字节的块...
上面的循环将从套接字读取 64 字节的块,直到没有内容可读为止。
另一个使用示例是一种现实模拟,当你想运行模拟直到随机数达到特定值。例如,掷骰子直到掷出 6:
from random import randint
def roll():
return randint(1, 6)
for die_roll in iter(roll, 6):
# 处理骰子结果。
内置 iter 带两个参数的 Python 模型
内置带两个参数的 iter
大致相当于这个生成器函数:
def iter(func, target_value):
while target_value != (value := func()):
yield value
:=
是 Python 3.8 版本引入的可在表达式中赋值的运算符,"the walrus operator"。
原文:https://mathspp.com/blog/til/making-an-iterator-out-of-a-function