【发布时间】:2021-12-18 22:46:29
【问题描述】:
是否有一个通用术语可以描述迭代(或“消耗”)迭代器的无参数可调用对象的类型?
比如 io 对象的 .readline(),或者 iter(callable, sentinel) 中的可调用对象,或者 functools.partial(next, iterator) 函数。
我现在用 CursorFunc = Callable[[], Any] 表示,但如果有什么问题,我想将我的语言与现有的语言保持一致。
Builtins 到处都有Iterable 和Iterator 对象,但发现这种CursorFunc 类型也经常出现,并且想要一个(不是完全发明的)名称来描述它。
------------ 编辑(UTC 2021-11-04 19:10)-----------
附加信息以阐明什么是“光标函数”,它不是 Generator(在 python 意义上)。
from functools import partial
from typing import Generator, Iterator, Iterable
iterable = [1, 2, 3]
assert isinstance(iterable, Iterable)
iterator = iter(iterable)
assert isinstance(iterator, Iterator)
cursor_func = partial(next, iterator)
assert not isinstance(cursor_func, Generator)
# A generator is like...
def gen():
yield from iterable
assert not isinstance(gen, Generator)
g = gen()
assert isinstance(g, Generator) and isinstance(g, Iterable) and isinstance(g, Iterator)
【问题讨论】:
-
消耗可迭代的东西将是一个迭代器。或者,使用一个不太具体的术语,消费者。
-
@JohnGordon 我不会使用“消费”这个词,但我明白你的意思。在这种情况下,我认为他们的意思不同
-
@JohnGordon,是的,它是一个 迭代器,但是您通过
next或for ...迭代一个迭代器。我要强调的区别是该对象是一个可调用对象(即functools.partial(next, iterator)),您调用它来获取下一个项目。 -
所以基本上你是在描述像
next()这样的可调用对象,但没有参数,对吧? -
@wjandrea -- 准确地说,如果你这样做了
functools.partial(next, iterator)),你会得到什么。
标签: python terminology type-hinting