在 Python 的 typing
模块中,Union
和 Optional
是两种不同的类型提示工具,它们在使用场景和含义上有所区别。
- Union:
Union
用于指定一个变量可以是多种类型中的一种。- 语法:
Union[type1, type2, ...]
- 例如,
Union[int, float]
表示一个变量可以是整数类型或者浮点数类型。
from typing import Union
def square(value: Union[int, float]) -> Union[int, float]:
return value * value
result1 = square(5) # 返回整数类型 25
result2 = square(2.5) # 返回浮点数类型 6.25
- Optional:
Optional
是Union
的一个特殊情况,用于表示一个变量可以是某种类型或者None
。- 语法:
Optional[type]
- 例如,
Optional[int]
表示一个变量可以是整数类型或者None
。
from typing import Optional
def divide(dividend: float, divisor: Optional[float]) -> Optional[float]:
if divisor is None:
return None
return dividend / divisor
result1 = divide(10, 2) # 返回 5.0
result2 = divide(10, None) # 返回 None
在这个示例中,divide
函数接受两个参数 dividend
和 divisor
,divisor
参数的类型被标注为 Optional[float]
,表示它可以是浮点数类型,也可以是 None
。在函数内部,如果 divisor
是 None
,函数会返回 None
,否则执行除法操作。
因此,Union
用于指定一个变量可以是多种类型中的一种,而 Optional
用于表示一个变量可以是某一种类型或者 None
。