【发布时间】:2021-12-06 12:51:45
【问题描述】:
我有一个带有一个参数的函数,它应该以int 或None 作为参数。有几种方法可以为这种复合类型创建类型别名:
# test.py
import typing
IntOrNone_1 = typing.TypeVar('IntOrNone_1', int, None)
IntOrNone_2 = typing.Union[int, None]
def my_func1(xyz: IntOrNone_1):
return xyz
def my_func2(xyz: IntOrNone_2):
return xyz
my_func1(12)
my_func1(None)
my_func1(13.7)
my_func1('str')
my_func2(12)
my_func2(None)
my_func2(13.7)
my_func2('str')
这两种方法都按照我的预期做,但是,对应的mypy erros 略有不同,但基本上具有相同的含义。
test.py:14:错误:“my_func1”的类型变量“IntOrNone_1”的值 不能“浮动”
test.py:15:错误:“my_func1”的类型变量“IntOrNone_1”的值 不能是“str”
test.py:19:错误:“my_func2”的参数 1 具有不兼容的类型 “漂浮”;预期“可选[int]”
test.py:20:错误:“my_func2”的参数 1 具有不兼容的类型 “str”;预期“可选[int]”
我倾向于使用第二种方法,因为它还会报告导致错误的参数。
我认为这两种方法确实是等效的,还是其中一种方法更受欢迎?
【问题讨论】:
标签: python typing typechecking