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'}
这个函数不仅仅可以接受固定的参数,还可以接受任意数量的关键字参数。