继续给大家介绍 Python 3.10 的新特性,今天要给大家介绍的是 联合类型操作符。
在以前,我们判断一个类型是否是某几个类型中的一个的时候,一般可以这么写的
def check_type_str_or_int(obj):
if isinstance(obj, str):
return True
elif isinstance(obj, int):
return True
else:
return False
或者可以更加简洁一点
def check_type_str_or_int(obj):
t = type(obj)
if t in [str, int]:
return True
else:
return False
但在 3.10 以后,你再也不用写那么多代码了,使用 3.10 中新增的联合类型操作符 |
就可以轻松实现。
>>> isinstance(1024, int | str)
True
到这里,你会不会有这些疑问:难道联合类型操作符,就是为了方便 isinstance 函数的判断吗?
其实不是的,就算没有 联合类型操作符,isinstance 也可以用一行代码实现上述功能,只是没那么直观
>>> isinstance(1024, (int, str))
True
>>> isinstance("iswbm", (int, str))
True
尝试打印一下 int | str
,发现它其实是一个 types.UnionType
类型的对象
相信使用类型注解的朋友,对它应该不会陌生,比如下面这个例子,表明函数的接收的参数和返回的结果都是一个 str 或者 int 类型的对象
from typing import Union
def demo(obj: Union[str, int]) -> Union[str, int]:
return obj*2
而之前这种 typing.Union 联合类型 只能用于类型注解。
随着 Python 3.10 的到来, typing.Union 联合类型也可以用来其他地方,比如 isinstance
或者 issubclass
函数中。
并且,为了降低编码的难度,Python 还专门提供了一种联合类型的操作符 |
,利用这个操作符可以直接构造联合类型对象。
因此以后类型注解可以用更直观的写法了
但千万注意,在这个操作符的两边,可以是内置类型,也可以是自定义类型,但不能是对象。