gpt4 book ai didi

python输入: overload vs TypeVar

转载 作者:行者123 更新时间:2023-12-04 08:40:32 24 4
gpt4 key购买 nike

我问自己是否有关于使用 TypeVar 的最佳实践和 overload在 python 中用于返回与输入相同类型的函数。考虑这些例子。
示例 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仅在返回类型与输入类型不同时使用?还是很好但过于冗长?
当然,这是一个微不足道的例子。我正在查看的代码可能更需要 Pandas SeriesDataFrame作为输入而不是 strint .

编辑:更新示例以显示 int 有不同的代码路径和 str

最佳答案

没有一般的“最佳实践”,但在适用时 TypeVar在任何情况下都是优越的。

  • 使用 TypeVar更短。每个额外的类型都是一个额外的参数,而重载则需要 2-3 行。
  • 使用 TypeVar更清楚。它立即表示所有变体的工作原理基本相同,而 overload可以有额外的参数。
  • 使用 TypeVar信息量更大。运行时函数保留其注释以供自省(introspection),而 overload注释被丢弃。

  • 更喜欢限制 overload对于签名显着不同的情况,即在特定变体中具有附加或受限参数。

    关于python输入: overload vs TypeVar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64588672/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com