详解python3类型注释annotations实用案例

  • Post category:Python

当我们编写 Python 代码时,很容易因为变量类型不明确而导致错误。为了解决这个问题,Python3 中引入了类型注释(annotations)的概念。本文将详细讲解 Python3 的类型注释,让你掌握如何使用 annotations 解决代码中不确定性的问题。

一、什么是 Python3 的类型注释(annotations)?

Python3 引入了类型注释,可以让我们在代码中明确变量的类型。类型注释使用冒号(:)进行声明,放在变量名之后。例如:

def greeting(name: str) -> str:
    return "Hello, " + name

在这个例子中,我们使用了类型注释,声明了参数 name 和返回值的类型都是字符串 (str)。

有时候类型注释中可能需要表示某些类型的 Optional/nullable 版本,或者声明一个变量可以接受多种类型。这时可以使用 Union 和 Optional 类型。例如:

from typing import Optional, Union

def print_number(n: Optional[Union[int,float]]):
    if n is not None:
        print("The number is: ", n)

在这个例子中,我们使用了 Union 和 Optional 类型,表示 n 可以接受 intfloat 两种类型,同时还可以接受空值 (None)。

二、Python3 的类型注释用途

  1. 帮助代码的阅读和理解。类型注释可以让代码更清晰地表达出变量和函数的用途。
  2. 帮助 IDE 如 PyCharm 等进行代码补全和报错检查,提高代码质量。
  3. 帮助第三方模块进行类型检查,提高代码健壮性。

三、Python3 的类型注释实用案例示例

示例一:计算器

我们假设需要写一个计算器程序,可以对两个数进行加减乘除运算。为了保证数值的正确性,我们使用了类型注释进行变量类型的声明。

def add(a: float, b: float) -> float:
    return a + b

def subtract(a: float, b: float) -> float:
    return a - b

def multiply(a: float, b: float) -> float:
    return a * b

def divide(a: float, b: float) -> float:
    if b == 0:
        raise ValueError("division by zero")
    return a / b

在本例中,我们使用了 float 类型注释来明确变量 a、b 和返回值的类型。

示例二:计算同比增长率

我们假设需要写一个程序,计算某年和上一年的工资总额,并计算同比增长率。在这个示例中,我们使用了 Union 和 Optional 类型。

from typing import Optional, Union

def calculate_growth(last_year_salary: Optional[Union[int,float]], this_year_salary: Optional[Union[int,float]]) -> Optional[float]:
    if last_year_salary is None or this_year_salary is None:  # 如果有数值为空,则返回 None
        return None
    if last_year_salary == 0:  # 如果上年工资总额为0,则返回无穷大
        return float('inf')
    return (this_year_salary - last_year_salary) / last_year_salary

在本例中,我们使用了 Optional 和 Union 类型。因为有可能输入为 None 或者为空值时,返回值应该为 None;而两个参数也有可能是 int 或者 float 类型。因此使用了 Union[int,float], Optional[float] 来进行类型注释。

四、总结

类型注释是 Python3 中一个非常实用且强大的功能。可以帮助我们编写更加健壮的代码,也让代码更易于阅读和理解。在实际的开发中,我们应该在合适的位置增加类型注释,用好它可以提高代码的质量,进而提高代码的可维护性和可读性。