在Python中声明下列函数类型的正确方法是什么?
from typing import TypeVar, List
T = TypeVar('T') # Declare type variable
def dual_combinator(self, a: List[T], b: List[T]) -> List[T]:
return [x for x in a if x in b]
我希望该类型表明输入变量a
和b
可以是与列表推导和in
运算符兼容的任何东西,并且输出应该是列表推导的输出。我认为a: List[T]
和b: List[T]
可能太具体了,返回类型List[T]
也可能是错误的。
我对这种特殊的类型系统很陌生。我还没想好怎么找到这样的信息。它可能在文档的某个地方有描述,所以我也希望简要描述一下如何在将来找到这样的文档。
你要迭代的参数应该是Iterable
,你要搜索的参数应该是Container
。
from collections.abc import Iterable, Container
def dual_combinator(self, a: Iterable[T], b: Container[T]) -> List[T]:
return [x for x in a if x in b]
列表推导式总是返回一个列表,因此List[T]
是正确的返回类型。