使用迭代器的可调用对象的名称? [关闭]
Posted
技术标签:
【中文标题】使用迭代器的可调用对象的名称? [关闭]【英文标题】:Name of a callable that consumes an iterator? [closed] 【发布时间】: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))
,你会得到什么。
【参考方案1】:
通常这些东西被称为 generators(eg,在“随机数生成器”或in C++)中,尽管在 Python 中这当然是指a specific means of constructing an iterator (可以从中派生出另一种生成器)。
【讨论】:
我刚刚编辑了这篇文章,通过代码断言来争论(对于 python 而言),生成器不是正确的术语。 @thorwhalen:你实际上并没有说“对于typing
的目的,我应该怎么称呼它?”,这可能太基于意见了;你问是否有一个通用术语,这是。
生成器生产迭代器,而不是消耗它们。
@JohnGordon:两者兼有:lambda: next(my_iter)
在内部消耗 my_iter
,但在外部可以被视为值的来源(非 Python 意义上的“生成器”)。
以上是关于使用迭代器的可调用对象的名称? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章