本文主要是介绍【学习心得】Python的注解/Type Hints(简介),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Python3.5之后出现的新特性(Python Type Hints),中文翻译可以叫做“注解”、“类型标注”、“类型提示”。类型标注的作用是:指明某个变量或者返回值的类型,他的语法形式是什么样子的呢?这篇文章是我自己学习Python过程中的一个知识点小记,希望能帮助到大家。
一、基本语法
(1)变量类型注解
variable_name: type
举例说明
age: int = 30 # 变量age被注解为整数类型
name: str = "Alice" # 变量name被注解为字符串类型
a = 1
type(a) # <class 'int'>a: int = 1
type(a) # <class 'int'>a: int = "你好"
type(a) # <class 'str'>
【注】从上图可以看出,Python的类型标注,虽然指明了希望你赋值一个int类型但你仍然可以按照你自己的想法去改变赋值的数据类型。
(2)函数参数类型注解
在函数定义中,可以在参数名后跟一个冒号和类型,还可以用"->"箭来指定返回值类型。
举例说明
def greeting(name: str) -> str:return 'hello ' + name
【注】从上图可以看出, 开发者可以通过类型标注确保函数接口的一致性,这样其他开发者在调用该函数时会清楚应该传递何种类型的参数,从而避免错误。
(3)函数带有关键字参数和默认值的情况
def calculate_area(radius: float = 1.0) -> float:return 3.14 * radius ** 2
(4)元组和列表类型注解
元组类型提示:variable_name: tuple[type1, type2, ...]
列表类型提示:variable_name: list[type]
元组或者列表类型后面用中括号表明所装元素的类型
举例说明一
# 元组类型提示
coordinates: tuple[int, int] = (100, 50)# 列表类型提示
students: list[str] = ['小明', '小花', '小红']
举例说明二
def scale(scalar: float, vector: list[float]) -> list[float]:return [scalar * num for num in vector]new_vector = scale(2.0, [1.0, -4.2, 5.4])
(5)字典类型注解
variable_name: dict[key_type, value_type]
这里的
key_type
和value_type
分别代表字典中键和值的预期数据类型。
举例说明
# 字典类型注解的实例
person_info: dict[str, any] = {"name": "Alice","age": 30,"city": "New York"
}
【注】 中括号中第一个位置是key的类型,第二个位置是value的类型。可以用any来表明value可以是任意类型数据。
(6)给类型取别名
类型别名是使用type语句来定义type Vector = list[float]
type语句是在 Python 3.12 中新增加的。 为了向下兼容,类型别名也可以通过简单的赋值来创建Vector = list[float]
举例说明
# type Vector = list[float]
Vector = list[float]def scale(scalar: float, vector: Vector) -> Vector:return [scalar * num for num in vector]new_vector = scale(2.0, [1.0, -4.2, 5.4])
二、类型注解的好处
(1)提升代码可读性
类型标注能够使阅读代码的人快速理解每个变量、函数参数和返回值的预期类型,这在大型项目或团队协作开发中尤为重要,有助于减少误解,提高代码的自文档化能力。
(2)提高代码的可用性和可靠性
开发者可以通过类型标注确保函数接口的一致性,这样其他开发者在调用该函数时会清楚应该传递何种类型的参数。类型标注也可以作为API文档的一部分,指导用户正确地使用代码。
(3)静态类型检查与错误预防
虽然Python是动态类型的语言,但在编写类型标注后可以配合静态类型检查工具(如mypy)进行类型检查。这些工具能够在编译阶段发现潜在的类型错误,从而提前修复,减少运行时由于类型错误引发的异常。
三、静态类型检查mypy的简单使用
(1)安装
pip install mype
(2)使用
这里有一个叫做test.py的文件
# 双向链表节点
class Node:def __init__(self, data: int, prev: "Node"):self.data = dataself.next = Noneself.prev = prev
用mype test.py来执行静态类型检查,静态类型检查的意思是在没有运行程序的情况下检查出语法错误。检查变量是否被赋予了正确的数据类型,函数参数是否匹配其声明的类型,以及函数返回值是否符合预期类型。
mypy test.py
这篇关于【学习心得】Python的注解/Type Hints(简介)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!