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

Python中typing模块的使用方法

发布时间:2023-12-23 22:19:05

typing模块是Python中用于类型注解的模块,它提供了一组用于指定函数、变量和类的类型的工具。使用typing模块可以在代码中添加类型提示,提高代码的可读性和可维护性。

typing模块中主要包含了以下几种类型:

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

2. 容器类型:List、Tuple、Dict、Set等;

3. 函数类型:Callable、Generator等;

4. 类型变量:TypeVar;

5. 泛型类型:Generic、Union、Optional等。

下面是一些常用的使用方法和例子:

1. 指定函数的参数类型和返回值类型:

from typing import List

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

def add(nums: List[int]) -> int:
    return sum(nums)

print(greet("Alice"))  # 输出:Hello, Alice
print(add([1, 2, 3]))  # 输出:6

2. 指定类的属性和方法的类型:

from typing import List

class Stack:
    def __init__(self):
        self.items: List[int] = []
    
    def push(self, item: int) -> None:
        self.items.append(item)
    
    def pop(self) -> int:
        return self.items.pop()
    
    def size(self) -> int:
        return len(self.items)

stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print(stack.pop())    # 输出:3
print(stack.size())   # 输出:2

3. 定义泛型类型:

from typing import List, TypeVar

T = TypeVar('T')

def get_first_element(items: List[T]) -> T:
    return items[0]

print(get_first_element([1, 2, 3]))       # 输出:1
print(get_first_element(['a', 'b', 'c'])) # 输出:'a'

4. 使用Union指定多种可能的类型:

from typing import Union

def check_number(num: Union[int, float]) -> str:
    if isinstance(num, int):
        return "It's an integer."
    elif isinstance(num, float):
        return "It's a float."
    else:
        return "Invalid input."

print(check_number(10))        # 输出:It's an integer.
print(check_number(3.14))      # 输出:It's a float.
print(check_number("hello"))   # 输出:Invalid input.

5. 使用Optional指定可选的类型:

from typing import Optional

def get_name_prefix(name: Optional[str]) -> str:
    if name is None:
        return "Hello, "
    else:
        return "Hello, " + name

print(get_name_prefix(None))   # 输出:Hello, 
print(get_name_prefix("Alice")) # 输出:Hello, Alice

以上是typing模块的一些常用使用方法和例子,通过使用typing模块,可以为代码添加类型注解,提高代码的可读性和可维护性。