python中的 type hint 类型提示

许多IDE(如pycharm)会有输入类型提示和自动代码补全,就是靠类似于静态语言中的变量类型声明的做法。python语言是动态的,所以不存在需要使用重载功能,python中的重载只是为了类型提示和参数数目提示。

1. 使用overload或者typing.TypeVar(后者要求固定参数数目)

使用overload可以提示同一个名字的函数(方法)支持的不同类型和数目的形参。

使用typing.overload

from typing import Tuple
@overload 
def process(response: None) -> None:
    ...
@overload
def process(response: int) -> Tuple[int, str]:
    ...
@overload
def process(response: bytes) -> str:
    ...
def process(response):
    return 'hhe' + response

通过定义多个同名函数,上面的同名函数需要通过overload装饰器装饰。可以看到被装饰的函数的输入类型和输出类型都可以更改。但是,最后的实现方法一定要通用,也就是没有类型注解。

如下图,这样IDE就能自动提醒函数支持的输入参数的类型和数量了。

python中的 type hint 类型提示_第1张图片

 

使用typing.TypeVar

对于固定数量参数的方法而言,同一个参数如果打算接受多种类型,可以这么用,比方说参数可以是:int, float, str

import typing

MyTypeT = typing.TypeVar('MyTypeT', int, str)


def foo(name: MyTypeT) -> str: # 输入参数类型提示为MyTypeT,函数返回类型提示为str
    return str(name)
t = foo(3.1) # 将会提示:输入类型应该是 MyTypeT,而这里得到的却是float类型
y = foo(3) # 因为有类型提示,以后输入y.就能显示作为str类型具有的方法

 

2. 使用Function Annotation 

def foo(name:str) -> str:
    return 'hello' + name

如果输入 foo(2)则会报错,类型错误。

 

3. 在注释中加入类型提示

例如下面的例子中,IDE将识别出name和my_list的类型,并做自动补全提示

python中的 type hint 类型提示_第2张图片

 

4. from typing import List,Tuple,Set 

需要注意, 注释后面, 写 list,List 都可以, 但不在注释后面的typeHint, 如形参及返回类型, 必须使用typing 包下相应的类. 

from typing import List

def cal_sum(x:List[int]):
    sum = 0
    for ele in x:
        sum+= ele
    return sum

cal_sum()将会出现x:List[int]的提示

参考链接:https://blog.csdn.net/chuchus/article/details/77891128

 

5. hint vs. check

As the name says, type hints are just hints, 所以只做提示不做检查.  
但 IDE 可以做检查, 避免出错.

这里写图片描述
pic 4-1 Inspections in PyCharm

 

6.  __init__.pyi 和 pytorch中目前自动补全功能存在的bug

解决Pytorch在IDE中无法自动补全的问题

这个文件可以帮助我们添加type hints,我们的IDE就是通过这种 type hints 来实现自动补全的。所以,即使pytorch的库作者团队没有给pytorch添加.pyi来提供type hints,我们依然可以自己添加这样的文件,来帮助IDE实现自动补全的功能。



 

你可能感兴趣的:(python)