我问自己,对于返回与输入相同类型的函数,在python中使用TypeVar
和overload
是否有最佳实践。考虑这些例子。
例1。使用TypeVar
:
from typing import TypeVar
StrOrInt = TypeVar("StrOrInt", str, int)
def return_same_type_typevar(x: StrOrInt) -> StrOrInt:
if isinstance(x, str):
# process str
return x
else:
# process int
return x
示例2,使用overload
:
from typing import overload
@overload
def return_same_type_overload(x: str) -> str:
...
@overload
def return_same_type_overload(x: int) -> int:
...
def return_same_type_overload(x):
if isinstance(x, str):
# process str
return x
else:
# process int
return x
这两个例子真的达到了同样的效果吗?这里是否讨论了overload
的这种用法,并且overload
应该仅在返回类型与输入类型不同时使用?还是很好,但过于冗长
当然,这只是一个微不足道的例子。我正在查看的代码可能更多地采用pandasSeries
或DataFrame
作为输入,而不是str
和int
编辑:更新的示例显示int
和str
有不同的代码路径
没有一般的“最佳实践”,但在适用的情况下
TypeVar
在任何情况下都是优越的使用
TypeVar
比较短。每个附加类型都是一个附加参数,而重载则是2-3行使用
TypeVar
更清晰。它立即表示,所有变体的工作原理基本相同,而overload
可能有额外的参数使用
TypeVar
更能提供信息。运行时函数保留其注释以供内省,而overload
注释被丢弃倾向于将
overload
限制在其特征显著不同的情况下,即在特定变体中具有额外或受限参数相关问题 更多 >
编程相关推荐