支持“in”运算符的最佳基本类型?

kei*_*uke 6 python typing python-3.x

我有一个功能:

def f(a):
    return 100 in a
Run Code Online (Sandbox Code Playgroud)

我想注释这个参数a,例如

from typing import List
def f(a: List[int]):
    return 100 in a
Run Code Online (Sandbox Code Playgroud)

但支持运算符的类型不仅in是or (或者可能是 or或其他什么)。listsettupledictkeyview

我的问题是:

什么类型最适合a,支持哪些in运算符?
例如,哪种类型是提供此特定功能的最简单类型?

看起来typing.Containerortyping.Collection也可以,但我不知道哪种类型最好

Jac*_*vam 5

我会选Union[Container, Iterable]用于成员资格测试的python文档指出,它首先尝试__contains__,然后尝试__iter__确定成员资格。它还指出,它会尝试__getitem__同时失败,但仅限于旧式迭代。老实说,我不确定这意味着什么,但我认为我们可以安全地忽略它。

你的论点应该尽可能通用。如果您选择Collection这将禁止生成器,因为它们不实现len例如,但生成器支持该in关键字。

https://docs.python.org/3/library/collections.abc.html#collections.abc.Container