可迭代,无副作用类型注释

时间:2020-01-26 09:20:05

标签: python typing mypy

我正在寻找Iterable,它可以被迭代而不会产生副作用。 例如,我要注释以下参数x

def foo(x: NoSideEffectIterable[int]):
    for i in range(10):
        for xx in x: # x is iterated 10 times here
            print(i*xx)
  1. Iterable不适合,因为x被多次迭代
  2. Sequence不适合,因为x的顺序无关紧要

如何注释x

2 个答案:

答案 0 :(得分:1)

没有注释。这不是类型系统可以表达的概念。 if (view instanceof EditText) { EditText editText = (EditText) view; // do what you want with EditText } else if (view instanceof TextView) { TextView textView = (TextView) view; // do what you want with textView } else if .. 是您最好的选择。如果您想更严格一些,可以使用Iterable,但是Collection表示的要求比您想要的要少,而Iterable表示的要求却更多。

答案 1 :(得分:0)

尝试使用Iterator[int]。 Python中的迭代器是可迭代的,可在您迭代一次之后使用。希望对您有帮助