Python 3.10 新特性(二):联合类型操作符 “|” 的诞生

作者: 王炳明 分类: Python 高手进阶 发布时间: 2021-10-10 23:33 热度:1,273

继续给大家介绍 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

打印一下 int | str ,发现它其实是一个 types.UnionType 类型的对象

Python 3.10 新特性(二):联合类型操作符 “|” 的诞生

相信使用类型注解的朋友,对它应该不会陌生,比如下面这个例子,表明函数的接收的参数和返回的结果都是一个 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 还专门提供了一种联合类型的操作符 | ,利用这个操作符可以直接构造联合类型对象。

image-20211010232017072

因此以后类型注解可以用更直观的写法了

Python 3.10 新特性(二):联合类型操作符 “|” 的诞生

但千万注意,在这个操作符的两边,可以是内置类型,也可以是自定义类型,但不能是对象。

Python 3.10 新特性(二):联合类型操作符 “|” 的诞生

文章有帮助,请作者喝杯咖啡?

发表评论