类型注解

参考

python3.5中引入了类型注解(type hints),python3.6中进一步引入了变量注解(variable annotation),带来了许多方便。

typing模块(作为python内置模块可直接使用)

from typing import List, Tuple ...
  • List
var: List[int or float] = [2,3.5]
var: List[int, int, int] = [2,2,2]
  • Tuple
    按顺序说明了构成本元组元素的类型
a:Tupel[int, int]=1,2
  • Dict,Mapping
    中括号内分别声明键名,键值的类型;Dict推荐使用注解返回类型,Mapping推荐使用注解参数
def size(rec:Mapping[str, int])->Dict[str,int]:
    return {"width":rect["width"], "height":rect["height"]+10}
  • Set,AbstractSet
    Set推荐用于注解返回值类型,AbstarctSet推荐用于注解参数类型
def demo(s:AbstractSet[int])->Set[int]:
    return set(s)
  • Sequence
    是collections.abc.Sequence的泛型,当不需要严格区分某变量是list类型还是tuple类型时可以采用泛化的类型Sequence,用法类似于List
def square(elements:Sequence[int])->List[int]:
    return [x ** 2 for x in elements]
  • NoReturn
    用于注解没有返回值的方法的返回类型
def test()->NoReturn:
    pass
  • Any
    一种特殊类型,可代表所有类型,所有无参数类型注解和返回类型注解的都会默认使用Any类型
def add(a:Any, b:Any)->Any:
    return a+b
  • TypeVar
    可用于自定义兼容特定类型的变量的方法
Args=TypeVar("Args",int, float,None)
args=0
def getArgs()->Args:
    return args
  • NewType
    可用于声明一些具有特殊含义的类型(起别名)的方法
    Gender=NewType("Gender",str)

  • Callable
    可调用类型,常用于注解一个方法。声明时需要按照Callable[[Arg1Type, Arg2Type, ...], ReturnType],将参数类型和返回值类型都注解出来

def data(year:int, month:int, day:int)->str:
    return f'{year}-{month}-{day}' //格式化字符串
def get_data()->Callable[[int,int,int],str]:
    return data
  • Union
    类型选择中括号中其一
    • 多余的参数会被跳过;
    • 中括号中参数顺序会被忽略;
    • 仅有一个参数的联合类型等价于参数自身
def process(fn:Union[str,Callable]):
    if isinstance(fn,str):
        pass
    elif isinstance(fn,Callable):
        fn()
  • Optional
    意为此参数可以为空或者是中括号中的类型,并不代表可以不传递参数,而是指参数可以传为None
def judge(result:bool)->Optional[str]:
    if !result:
        return "Error"
  • Generator
    中括号中紧跟三个参数,分别代表[YieldType, SendType, ReturnType]
def infinite_stream(start:int)->Generator[int,None,None]:
    while True:
        yield start
        start+=1
posted @ 2020-11-14 22:28  圆圆的圈圈  阅读(278)  评论(0)    收藏  举报