宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

一、什么是Optional类型

Optional类型是python3.10中新增类型,主要用于解决函数返回值可能为None的情况。它的作用相当于Union[T, None],即返回值可以是T类型也可以是None。在python中,函数返回值为None时通常表示出现了错误或无法得到有效结果。因此Optional类型的引入可以使代码变得更加严谨和可靠。


from typing import Optional

def func_name(param1: str) -> Optional[int]:
    if param1.isdigit():
        return int(param1)
    else:
        return None

二、Optional类型的声明规则

在使用Optional类型时,需要注意以下几点:

* Optional类型只能表示函数返回值为None或T类型,不能用于函数参数。

* 对于Optional类型的参数,需要使用None进行判断。

* Optional类型不能与Union[T1, T2, …, Tn]混淆,它们的含义不同。


from typing import Optional

def func_name(param1: str) -> Optional[int]:
    if param1.isdigit():
        return int(param1)
    else:
        return None

result1 = func_name("123")
result2 = func_name("hello")

if result1:
    print(result1)
else:
    print("Invalid input")

if result2:
    print(result2)
else:
    print("Invalid input")

三、Optional类型的应用场景

Optional类型主要用于以下几个方面:

* 表示函数返回值可为空的情况。

* 与其它类型一同使用,用于提高代码可靠性。

* 结构体中存在空值的情况。


from typing import Optional

class Student:
    def __init__(self, name: str, age: Optional[int] = None):
        self.name = name
        self.age = age

    def show_info(self):
        if self.age:
            print(f"{self.name} is {self.age} years old")
        else:
            print(f"{self.name} age is unknown")

student1 = Student("Tom", 20)
student2 = Student("Jerry")

student1.show_info() # output: Tom is 20 years old
student2.show_info() # output: Jerry age is unknown

四、Optional类型的优缺点

Optional类型的优点:

* 明确表示函数返回值可能为空的情况,提高代码可读性和可靠性。

* 防止函数返回None时由于类型不匹配而引发的错误。

Optional类型的缺点:

* 需要判断返回值是否为None,增加代码复杂度。

* 无法解决需要返回多个可能为空的类型的情况,这时需要使用Union类型。


from typing import Optional

def func_name(name: str) -> Optional[str]:
    if name == "Tom":
        return name
    else:
        return None

result = func_name("Tom")

if result:
    print(result.upper())
else:
    print("Name not found")

五、小结

Optional类型是python3.10中新增类型,主要用于表示函数返回值可以为None或T类型。它的引入提高了代码可读性和可靠性,防止由于类型不匹配而引发的错误。然而,需要注意Optional类型对代码结构的影响,以及需要使用None判断返回值的情况。