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

Python中使用typing模块定义复杂数据类型

发布时间:2024-01-13 19:28:40

在Python中,我们可以使用typing模块来定义复杂的数据类型。typing模块提供了各种类型注释,可以用于函数参数和返回值的标注。下面是一些常见的使用例子。

1. 基本数据类型

我们可以使用typing模块来定义基本的数据类型,如下所示:

from typing import Optional, Tuple, List

def greeting(name: str) -> str:
    return f"Hello, {name}!"

def get_user_info(user_id: int) -> Optional[dict]:
    # 在这个例子中,Optional[dict]表示返回值可以是字典类型,也可以是None
    if user_id == 1:
        return {"name": "Alice", "age": 25}
    else:
        return None

def calculate_avg(nums: List[int]) -> float:
    return sum(nums) / len(nums)

def get_name_and_age(person: Tuple[str, int]) -> Tuple[str, int]:
    # 使用Tuple可以指定参数和返回值为固定长度的元组类型
    return person

2. 自定义类类型

我们可以使用typing模块来定义自定义类类型,如下所示:

from typing import Type

class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

def create_animal(animal_type: Type[Animal]) -> Animal:
    # 使用Type[Animal]指定参数必须是Animal或其子类类型
    return animal_type()

3. 多个参数类型

我们可以使用typing模块来指定函数参数有多个可能的类型,如下所示:

from typing import Union

def combine_strings(a: str, b: Union[str, int]) -> str:
    # 使用Union[str, int]表示参数b可以是字符串或整数类型
    return a + str(b)

4. 泛型类型

我们可以使用泛型来定义容器类的类型,如下所示:

from typing import List, Dict, Tuple

def process_data(data: List[Dict[str, int]]) -> List[Tuple[str, int]]:
    # 这个例子中,data是一个字典列表,其中键是字符串,值是整数
    # 返回的结果是一个元组列表,其中      个值是字符串,第二个值是整数
    processed_data = []
    for item in data:
        processed_data.append((item["name"], item["age"]))
    return processed_data

在上述例子中,我们使用了typing模块来定义了多种复杂数据类型,包括基本类型、自定义类类型、多参数类型和泛型类型等。通过使用typing模块,我们可以更准确地注释和标记代码中的参数类型和返回值类型,从而提高代码的可读性和维护性。