【问题标题】: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 到处都有IterableIterator 对象,但发现这种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,是的,它是一个 迭代器,但是您通过 nextfor ... 迭代一个迭代器。我要强调的区别是该对象是一个可调用对象(即functools.partial(next, iterator)),您调用它来获取下一个项目。
  • 所以基本上你是在描述像next() 这样的可调用对象,但没有参数,对吧?
  • @wjandrea -- 准确地说,如果你这样做了functools.partial(next, iterator)),你会得到什么。

标签: python terminology type-hinting


【解决方案1】:

通常这些东西被称为 generatorseg,在“随机数生成器”或in C++)中,尽管在 Python 中这当然是指a specific means of constructing an iterator (可以从中派生出另一种生成器)。

【讨论】:

  • 我刚刚编辑了这篇文章,通过代码断言来争论(对于 python 而言),生成器不是正确的术语。
  • @thorwhalen:你实际上并没有“对于typing 的目的,我应该怎么称呼它?”,这可能太基于意见了;你问是否有一个通用术语,这是。
  • 生成器生产迭代器,而不是消耗它们。
  • @JohnGordon:两者兼有:lambda: next(my_iter) 在内部消耗 my_iter,但在外部可以被视为值的来源(非 Python 意义上的“生成器”)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 2019-08-20
  • 2011-11-22
  • 1970-01-01
  • 2019-01-12
  • 2019-07-27
  • 1970-01-01
相关资源
最近更新 更多