Dar*_*n84 12 python type-annotation mypy python-typing
考虑一个执行类型提升的函数,例如两个数字的简单乘法,两个数字都可以是int或float:
def mul(a: int | float, b: int | float): # return type?
return a * b
Run Code Online (Sandbox Code Playgroud)
该函数返回,但和均为 的float情况除外。abint
如何正确、简洁地注释返回类型?我知道我可以这样做@overload:
from typing import overload
@overload
def mul(a: int, b: int) -> int: ...
@overload
def mul(a: float, b: int | float) -> float: ...
@overload
def mul(a: int | float, b: float) -> float: ...
def mul(a, b):
return a * b
Run Code Online (Sandbox Code Playgroud)
但这非常冗长,并且需要许多重载来处理我想象的某些“类型函数”应该处理的事情。在 C++ 中,这可以通过SFINAE来完成。在Python中,我可以用通用函数来做类似的事情吗?
def mul(a: T1, b: T2) -> promote_types(T1, T2):
return a * b
Run Code Online (Sandbox Code Playgroud)
这也适用于 TypeVars 吗?我不期望任何内置的东西已经适用于int和float,但也许有一些技术?
笔记:
我知道建议只用 with 来注释所有内容int,但我的设置有更复杂的 TypeVars, andfloat的选择这里只是一个简单的例子。intfloat
我知道我可以做到Union[int, float],但我需要具体一点。根据调用函数的确切类型,返回类型也必须是准确的,而不是联合。
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |