Python学习:如何使用类型注解

问题

Python代码写起来很快,但阅读起来,就很抓狂,主要问题就是类型信息丢失,看到一个函数或方法,都不知道如何传递参数,该函数会返回什么结果。只有运气来,才可以看到类型信息。

方案

Python 3.6版本之后,新增了类型注解特性(type hint),用户标记函数参数和返回值的类型,该特性主要是给人和IDE用的,实际代码执行的时候,并不会有作用,即使传递不期望的类型,依然会执行。接下来,列绝一些常用的类型注解。

  • 单一类型注解
def add(x : int, y: int)  -> int:
    return x + y
  • 列表类型注解
from typing import List

def add(x : List[int], y: List[int])  -> List[int]:
    pass

class YourClass:
    pass

def print_your_classes(obj:List[YourClass]):
    pass
  • 多类型注解
from typing import Union

def add(x : Union[int,str], y: Union[int,str])  -> Union[int,str]:
    pass
  • 缺省值注解
def add(x : int = 0, y: int = 0)  -> int:
    pass

class YourClass:
    pass

def print_your_classes(obj: YourClass=None):
    pass 
  • 参数为函数的注解
from typing import Callable

def func_hint(call : Callable[[int,int],int])->int:
    pass
  • 对象方法返回自身的注解
class YourClass:
    def set(self, field:str, value:any)->'YourClass':
        return self

对象方法返回自身,不能直接使用类名,而是用类名的字符串形式。

  • 任意类型的注解
def add(x:any, y:any)->any:
    pass

默认情况下,注解相当于注释,只供IDE和人审视。也可以安装第三方库(mypy、pytype、pyre、pyright),通过命令行进行检查。

pip3 install mypy
python3 -m mypy --strict example.py

总结

自由,总会带来一定的弊端,Python因为是动态类型,学起来很简答,但也因为没有了类型信息,代码不好看懂。上面总结了,常用的几种类型注解,一般情况下够用了。使用新版本的Python时候,建议多用类型注解,因为Python代码量一旦上去了,阅读起来会很困难,类型注解会大大提高代码的可读性。

你可能感兴趣的:(python,python)