什么每个 Python 开发人员都应该使用注释进行类型提示

360影视 2025-01-19 08:22 3

摘要:注释是最被低估的功能之一,但在我看来,它也是 Python 中最强大的功能之一。不是因为它们的功能,而是因为它对开发人员和其他贡献者有很大帮助。它们允许开发人员向变量、函数甚至方法中添加额外的元数据,使他们的代码更具可读性、自记录性并且更易于维护。在 Pyth

注释是最被低估的功能之一,但在我看来,它也是 Python 中最强大的功能之一。不是因为它们的功能,而是因为它对开发人员和其他贡献者有很大帮助。它们允许开发人员向变量、函数甚至方法中添加额外的元数据,使他们的代码更具可读性、自记录性并且更易于维护。在 Python 3 中引入的注释广泛用于类型提示和函数文档,但也可以根据您的需要用于其他目的。注释的一个有趣的方面是它们存储在函数的特殊.__annotations__属性中,使开发人员能够以编程方式访问和检查它们。

Python 中的注释提供了一种将元数据与函数参数和返回值关联起来的方法。此元数据存储在名为.__annotations__的字典中,该字典附加到函数对象。虽然注释通常用于类型提示,但 Python 在运行时不会强制执行它们。相反,它们充当开发人员和 linter 和 IDE 等工具的文档或指南。

def greet(name: str, age: int) -> str: return f"Hello, {name}. You are {age} years old." print(greet.__annotations__)# Output: {'name': , 'age': , 'return': }

注释的语法非常简单:

def add_numbers(x: int, y: int) -> int: return x + yprint(add_numbers.__annotations__)# Output: {'x': , 'y': , 'return': }age: int = 25name: str = "CyCoderX"

然而,与函数注释不同,变量注释不存储在特殊属性中 - 它们主要用于可读性和类型检查工具。

.__annotations__属性是一个字典,存储函数内定义的所有注释。每个参数的名称是一个键,其对应的注释是值。如果返回值被注释,它将存储在键'return'下。

def multiply(a: float, b: float) -> float: return a * bprint(multiply.__annotations__)# Output: {'a': , 'b': , 'return': }

注释可以帮助其他开发人员理解参数和返回值的预期类型,使您的代码更具可读性。

例子:

def concatenate(strings: list[str]) -> str: return ''.join(strings)

mypy这样的工具使用注释来执行静态类型检查,帮助您在运行前捕获错误。

使用 mypy 检查类型的命令:

mypy your_script.py

虽然 Python 不会在运行时强制执行类型,但您可以使用pydantic等库或创建自定义验证逻辑来根据注释验证类型。

带有自定义验证函数的示例:

def validate_annotations(func): annotations = func.__annotations__ def wrapper(*args, **kwargs): for arg_name, arg_value in zip(annotations.keys, args): if arg_name in annotations and not isinstance(arg_value, annotations[arg_name]): raise TypeError(f"Argument '{arg_name}' must be of type {annotations[arg_name]}") return func(*args, **kwargs) return wrapper@validate_annotationsdef say_hello(name: str, age: int): print(f"Hello {name}, you are {age} years old.")say_hello("CyCoderX", 30) # Workssay_hello("CyCoderX", "30") # Raises TypeError

注释可以存储任何元数据——而不仅仅是类型。例如,您可以存储默认值、测量单位或验证规则。

def calculate_speed(distance: float = 0.0, time: float = 1.0) -> "speed in m/s": return distance / timeprint(calculate_speed.__annotations__)# Output: {'distance': , 'time': , 'return': 'speed in m/s'}

Python 中的注释是每个开发人员都应该使用的一项很酷的功能,尤其是在协作和工作环境中。它们增加了清晰度,使代码能够自我记录,并帮助其他开发人员理解代码的每个部分的用途。花费数小时调试或破译脚本正在做什么并不有趣——尤其是当脚本运行数千行时。

通过使用注释,您可以节省时间、减少错误,并使您的代码对您自己和其他人来说更容易理解。无论您是在处理小型个人项目还是为大型团队代码库做出贡献,注释都是在可读性和可维护性方面带来巨大胜利的一小步。如果您还没有使用它们,那么现在就开始吧!

来源:自由坦荡的湖泊AI

相关推荐