当我们编写 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
可以接受 int
和 float
两种类型,同时还可以接受空值 (None
)。
二、Python3 的类型注释用途
- 帮助代码的阅读和理解。类型注释可以让代码更清晰地表达出变量和函数的用途。
- 帮助 IDE 如 PyCharm 等进行代码补全和报错检查,提高代码质量。
- 帮助第三方模块进行类型检查,提高代码健壮性。
三、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 中一个非常实用且强大的功能。可以帮助我们编写更加健壮的代码,也让代码更易于阅读和理解。在实际的开发中,我们应该在合适的位置增加类型注释,用好它可以提高代码的质量,进而提高代码的可维护性和可读性。