Python实战开发速查笔记——类型注解篇

目录

什么地方需要

如何写类型注解

注意事项


参考链接:https://mmengine.readthedocs.io/zh_CN/latest/notes/code_style.html#id13

什么地方需要

  1. 公共API
  2. 容易出现类型相关错误的代码;
  3. 难以理解的代码;
  4. 代码中类型已经稳定,可以注释;
  5. 权衡代码的安全性、清晰性、灵活性后;

如何写类型注解

  1. 全部位于一行;
  2. 另起一行;
  3. 单独成行;
  4. 引用尚未定义的类型;
from typing import Optional, List, Tuple

# 全部位于一行
def my_method(self, first_var: int) -> int:
    pass

# 另起一行
def my_method(
        self, first_var: int,
        second_var: float) -> Tuple[MyLongType1, MyLongType1, MyLongType1]:
    pass

# 单独成行(具体的应用场合与行宽有关,建议结合 yapf 自动化格式使用)
def my_method(
    self, first_var: int, second_var: float
) -> Tuple[MyLongType1, MyLongType1, MyLongType1]:
    pass

# 引用尚未被定义的类型
class MyClass:
    def __init__(self,
                 stack: List["MyClass"]) -> None:
        pass

注意事项

  1. 函数或方法中,通常不对 self 和 cls 注解;
  2. 类型注解的类型可以是内置类型,也可以是自定义类,还可以使用 wrapper 类对类型注解进行装饰;
  3. 变量类型注解;
# 数值类型
from numbers import Number

# 可选类型,指参数可以为 None
from typing import Optional
def foo(var: Optional[int] = None):
    pass

# 联合类型,指同时接受多种类型
from typing import Union
def foo(var: Union[float, str]):
    pass

from typing import Sequence  # 序列类型
from typing import Iterable  # 可迭代类型
from typing import Any  # 任意类型
from typing import Callable  # 可调用类型

from typing import List, Dict  # 列表和字典的泛型类型
from typing import Tuple  # 元组的特殊格式
# 虽然在 Python 3.9 中,list, tuple 和 dict 本身已支持泛型,但为了支持之前的版本
# 我们在进行类型注解时还是需要使用 List, Tuple, Dict 类型
# 另外,在对参数类型进行注解时,尽量使用 Sequence & Iterable & Mapping
# List, Tuple, Dict 主要用于返回值类型注解
# 参见 https://docs.python.org/3/library/typing.html#typing.List
# Recommend: 带类型注解的赋值
a: Foo = SomeUndecoratedFunction()
a: List[int]: [1, 2, 3]         # List 只支持单一类型泛型,可使用 Union
b: Tuple[int, int] = (1, 2)     # 长度固定为 2
c: Tuple[int, ...] = (1, 2, 3)  # 变长
d: Dict[str, int] = {'a': 1, 'b': 2}

# Not Recommend:行尾类型注释
# 虽然这种方式被写在了 Google 开源指南中,但这是一种为了支持 Python 2.7 版本
# 而补充的注释方式,鉴于我们只支持 Python 3, 为了风格统一,不推荐使用这种方式。
a = SomeUndecoratedFunction()  # type: Foo
a = [1, 2, 3]  # type: List[int]
b = (1, 2, 3)  # type: Tuple[int, ...]
c = (1, "2", 3.5)  # type: Tuple[int, Text, float]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值