Python 3中的函数注释是一种为函数的参数和返回值提供类型提示的机制。这种注释不改变函数的行为,但可以帮助IDE进行类型检查、自动完成以及重构等。
自定义函数注释的基本语法如下:
def 函数名(参数1: 类型提示,参数2:类型提示, ...) -> 返回值类型:
函数体
return 返回值
以下是一些例子:
1.带多个参数和返回值类型提示的函数
def add(x:int,y:float) -> float:
return x+y
2.使用类型别名
可以定义类型别名来简化复杂的类型提示:
from typing import List
Vector = List[float]
def scale(scalar: float, vector: Vector) -> Vector:
return [scalar * num for num in vector]
这里,Vector
是一个类型别名,代表一个浮点数列表。函数 scale
接受一个浮点数和一个 Vector
类型的列表,返回一个新的 Vector
。
3.可选参数和默认值
def greet(name: str, greeting: str = 'Hello') -> str:
return f'{greeting}, {name}'
4.不定长位置参数
def print_numbers(*numbers: int):
for number in numbers:
print(number)
*numbers
是一个不定长参数,所有的参数都会被当作整数处理。
5.不定长关键字参数
from typing import TypedDict
class UserInfo(TypedDict):
name: str
age: int
location: str
def print_user_info(**kwargs: UserInfo) -> None:
for key, value in kwargs.items():
print(f"{key}: {value}")
# 使用示例
print_user_info(name="Alice", age=30, location="New York")
6.高级类型提示
Python的类型提示还支持更复杂的情况,比如联合类型、泛型等。
from typing import Union
def func(x: Union[int, str]) -> Union[int, str]:
# 函数可以接受整数或字符串类型的参数,并且返回类型也是整数或字符串
函数体
return 返回值
在Pycharm、VSCode等一些编辑器中,当你将鼠标移动到非自定义的函数名上时,便可以看到该函数的注释,以下是一个具体实例:
解读:
-
label: str
label
是一个必需的参数,类型为str
(字符串),表示图表标题的文本内容。 -
fontdict: dict = ...
fontdict
是一个可选的参数,默认值未明确给出(用...
表示)。它是一个字典,用于指定标题的字体属性,如字体大小、样式、颜色等。 -
loc: Literal['center', 'left', 'right'] = ...
loc
是一个可选的参数,默认值未明确给出。它使用了类型提示Literal
来限制参数值只能是 ‘center’、‘left’ 或 ‘right’ 中的一个,表示标题的位置。 -
pad: float = ...
pad
是一个可选的参数,默认值未明确给出。它是一个浮点数,表示标题与图表顶部的距离。 -
*
表示之后的参数必须作为关键字参数传递,不能作为位置参数 -
y: float = ...
y
是一个可选的关键字参数,默认值未明确给出。它是一个浮点数,表示标题的垂直位置。 -
**kwargs: Any
**kwargs
是一个不定长的关键字参数,类型提示为Any
,表示可以接受任何额外的关键字参数。这些参数可能会被用于自定义标题的其他属性。 -> Text
这个函数返回一个Text
对象,这通常是在绘图库(如 matplotlib)中表示文本的一个类。