python-类型注解,增强代码提示

python3 可以通过类型注解,使得编辑器进行相应代码提示。

函数注解

: 类型 的形式指定函数的参数类型,用 -> 类型 的形式指定函数的返回值类型

1
2
3
4
def list2str(l:list) -> str:
l.append('c')
s = ''.join(l)
return s

提示如下:

1.png

需要说明的是:python 解释器并不会因为这些注解而提供额外的校验,类型注解不会对代码本身的功能产生任何影响。

在函数的 __annotations__ 属性中会有你设定的注解:

1
2
3
4
print(list2str.__annotations__)

# output
{'l': <class 'list'>, 'return': <class 'str'>}

检验

我们可以通过 mypy 库来检验最终代码是否符合注解:

1
pip install mypy

看如下示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
===================
test.py
===================

# 函数注解
def list2str(l:list) -> str:
l.append('c')
s = ''.join(l)
return s


l = ['a', 'b'] # list
s = list2str(l)
print(s)

--------------------
run: mypy test.py
--------------------

# output
Success: no issues found in 1 source files
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
===================
test.py
===================

# 函数注解
def list2str(l:list) -> str:
l.append('c')
s = ''.join(l)
return s


l = ('a', 'b') # tuple
s = list2str(l)
print(s)

--------------------
run: mypy test.py
--------------------

# output
test.py:11: error: Argument 1 to "list2str" has incompatible type "Tuple[str, str]"; expected "List[Any]"
Found 1 error in 1 file (checked 1 source file)

变量类型注解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from typing import List, Tuple, Dict, Set

a:int = 123
b:float = 4.5
c:str = 'abc'
l:list = [1,2,3]
s:set = {1,2,3}
t:tuple = (1,2,3)
d:dict = {'a':1}

# 指定容器类型
ll:List[int] = [1,2,3]
ss:Set[int] = {1,2,3}
tt:Tuple[int,str,int] = (1,'a',2)
dd:Dict[str,int] = {'a':1,'b':2} # type--> str:int

类型别名

1
2
3
4
5
6
7
8
9
10
11
12
13
from typing import List

# 别名
Vector = List[str]

def list2str(l:Vector) -> str:
l.append('c')
s = ''.join(l)
return s

l:Vector= ['a','b']
s = list2str(l)
print(s)