Python 函数类型系统

  • Post category:Python

Python 函数类型系统是指在函数定义和调用过程中对参数类型、返回值类型等的规范和控制。在 Python 中,函数的类型系统是非常灵活的,支持动态类型和类型注释。

函数参数类型注释

函数参数类型注释可以在函数定义时声明参数的类型,以便编译器可以检查传入的参数的正确性。类型注释应该写在参数名称后面,使用“:”符号连接,如下所示:

def add(x: int, y: int) -> int:
    return x + y

在这个例子中,我们声明了两个参数 x 和 y 的类型为 int,返回值的类型也是 int。

函数返回值类型注释

函数返回值类型注释可以在函数定义时声明函数返回值的类型。类型注释应该写在函数的参数列表后面,使用“->”符号连接,如下所示:

def divide(a: int, b: int) -> float:
    return a / b

在这个例子中,我们声明了函数 divide 的参数类型为 int,返回值类型为 float。

函数参数默认值

函数参数默认值可以在函数定义时为参数提供一个默认值。当调用函数时不传递这个参数时,就使用这个默认值。默认值可以是任何值,包括数字、字符串、列表、元组等等。

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

在这个例子中,我们定义了函数 greeting,它有两个参数,其中 message 有一个默认值为 ‘Hello’。如果调用 greeting 时只传递一个参数,则默认使用 ‘Hello’ 这个值。示例调用如下:

print(greeting('Tom'))  # 输出: Hello, Tom!
print(greeting('Jerry', 'Hi'))  # 输出: Hi, Jerry!

函数可变参数

函数可变参数可以接受任意数量的参数,并将它们封装成一个元组。使用 * 符号来表示函数可变参数。

def arithmetic_mean(*numbers: float) -> float:
    return sum(numbers) / len(numbers)

在这个例子中,我们定义了一个函数 arithmetic_mean,它的参数列表中包含一个可变参数 *numbers,用来接受任意数量的参数。示例调用如下:

print(arithmetic_mean(1, 2, 3))  # 输出: 2.0
print(arithmetic_mean(1, 2, 3, 4, 5))  # 输出: 3.0

函数关键字参数

函数关键字参数可以接受一个字典,其中键是参数名,值是参数值。使用 ** 符号来表示函数关键字参数。

def profile(name: str, age: int, **kwargs: str) -> dict:
    return {'name': name, 'age': age, **kwargs}

在这个例子中,我们定义了一个函数 profile,它的参数列表中包含两个参数 name 和 age,以及一个关键字参数 **kwargs。示例调用如下:

print(profile('Tom', 20, city='New York', job='Engineer'))
# 输出: {'name': 'Tom', 'age': 20, 'city': 'New York', 'job': 'Engineer'}

这个函数不仅仅可以接受固定的参数,还可以接受任意数量的关键字参数。