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也可以,但我不知道哪种类型最好。
我会选Union[Container, Iterable]。用于成员资格测试的python文档指出,它首先尝试__contains__,然后尝试__iter__确定成员资格。它还指出,它会尝试__getitem__同时失败,但仅限于旧式迭代。老实说,我不确定这意味着什么,但我认为我们可以安全地忽略它。
你的论点应该尽可能通用。如果您选择Collection这将禁止生成器,因为它们不实现len例如,但生成器支持该in关键字。
https://docs.python.org/3/library/collections.abc.html#collections.abc.Container