Python3.5 开始支持类型注解(type hints,PEP 484),用来限定方法参数类型、返回值类型、变量类型等
介绍
- 作用:类型提示,不影响程序的运行,编辑器会提示错误
- 常见类型
int
整型long
长整形float
浮点型bool
布尔型str
字符串类型
- typing 定义了支持的类型
Any
任意类型,item: Any
List
列表Tuple
元组Dict
字典Set
集合Iterable
可迭代类型Iterator
迭代器类型Generator
生成器类型- 等
- 指定类型时,也可以使用
list
、set
、dict
、tuple
- 可以使用 python
mypy
来检查
示例
a: int = 521
b: str = 'xyz'
def add(x:int, y:int, z: bool or str) -> int:
return x + y
from typing import Tuple
def function() -> Tuple[str, int]:
return "abc", 1
from typing import List
alist: List[int] = [5, 2, 1]
vector = List[int]
alist: vector = [5, 2, 1]
# 等价于
alist: List[int] = [5, 2, 1]
from typing import TypeVar
T = TypeVar('T') # Declare type variable
def int_or_str(arg: int | str) -> None:
# https://github.com/x-actions/python3-cisctl/blob/main/cisctl/api/__init__.py#L27
def sort_tags(self, name) -> (bool, List[Tuple[str, int]], Dict):
- 定义函数参数类型和默认值
Union
联合类型Union[int, str]
表示既可以是 int
,也可以是 str
;等价于 vars: [int or str]
def set(name: str, ok: bool = False, abc: Union[ExpiryT, None] = None):
...
# (true, ['s11', 's12', ...], ['s21', 's22', ...])
Tuple[bool, List[str], List[str]]
T = TypeVar('T')
def test(name: T) -> T:
print(name)
return name
test(11)
# True or False
isinstance(<obj>, Callable)
# 函数定义
def print_name(name: str):
print(name)
# Callable 作为函数参数使用时有类型检查的作用,检查传入的参数值 get_func 是否为可调用对象
# 第一个类型(str)代表参数类型
# 第二个类型(None)代表返回值类型
def get_name(get_func: Callable[[str], None]):
return get_func
vars = get_name(print_name)
vars("test")
class Person:
def __init__(self, name: str):
self.name = name
def hello(p: Person) -> str:
return f'Hello, {p.name}'