欢迎访问宙启技术站
智能推送

Python中typing模块的具体使用

发布时间:2023-05-14 00:50:43

Python中的typing模块是一个非常有用的模块,它提供了一些工具来帮助开发人员在代码中添加类型提示,在大型项目中特别有用。typing模块可以设置变量类型、函数参数类型、函数返回类型等。

一、typing模块的常用类型

1. 基本类型:int、float、bool、str等。

2. 作为变量类型的类:typing.Type[var]。

3. 作为可迭代对象的类型:typing.Iterator[t]。

4. 作为函数参数类型的类型:typing.Callable[[args], return_type]。

5. 作为TypeHint的类型:typing.TypeHint。

二、如何使用typing模块

1. 声明变量类型

要指定Python中变量的类型,我们可以在其名称后面加上它的类型注释。但是,为了避免代码冗长,typing模块为标准类型引入了类型提示。例如,如果要声明一个列表类型的变量,则可以使用List类型注释:

from typing import List

numbers: List[int] = [1, 2, 3, 4]

这告诉Python,numbers变量是一个List类型,并且它包含整数。再例如,声明一个字典类型的变量:

from typing import Dict

user = Dict[str, str]

website: user = {'name': 'Kobe', 'age': '41'}

这将告诉Python,user是一个字典类型,并且它的键和值都是字符串类型。而website变量,则是属于user类型。

2. 函数参数类型

在Python中,函数也可以添加类型注释:

def greet(name: str) -> str:
    return 'Hello ' + name

这里的注释表明了greet函数的参数是一个字符串类型,返回一个字符串类型。在运行时,如果参数类型不是字符串,Python会自动引发类型错误,这有助于在开发阶段发现代码错误。

3. 函数返回类型

我们不仅可以在函数参数中设置类型,还可以设置函数的返回类型注释。例如:

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

这告诉Python,add函数应该返回一个Integer类型。

4. 作为Class的类型

我们可以使用如下方法指定一个类变量:

from typing import TypeVar, List

T = TypeVar('T')

class Stack:
    def __init__(self) -> None:
        self._stack: List[T] = []

    def push(self, item: T) -> None:
        self._stack.append(item)

    def pop(self) -> T:
        return self._stack.pop

这里使用了TypeVar创建一个通用变量T,然后使用List[T]表示Stack._stack中存储的元素类型。这有助于实现类型提示,使开发者能够知道何时可以添加哪些类型的元素到Stack._stack中。

5. 类型别名

我们可以为任何类型创建类型别名来简化代码。例如,假设我们定义了以下字典:

user = {
  'name': str,
  'age': int,
  'city': str
}

这可以帮助开发人员知道每个键的期望类型,但我们可以使用如下方式将其简化:

from typing import Dict

User = Dict[str, Union[str, int]]

user: User = {
  'name': 'John',
  'age': 30,
  'city': 'New York'
}

这里我们使用Union表示键可以是字符串或整数,然后将其合并为User类型别名。这么做会让代码变得简洁清晰。