02 标注类型:容器中的元素(python3-9)

标注类型:容器中的元素(python3.9)

​ 有时候需要对容器进行类型标注,来保证容器中的每个元素都是一样的类型。

​ 如果直接使用list或者tuple,是不能检测容器里的元素类型的。

def my_sum(lst: list) -> int:
total = 0
for i in lst:
total += i
return total

my_sum([0, 1, 2])
my_sum([0, 1, '2']) # bad

标注list中的元素(python3.9)

​ 使用list[int]的方法进行标注:

def my_sum(lst: list[int]) -> int:
total = 0
for i in lst:
total += i
return total

my_sum([0, 1, 2])
my_sum([0, 1, '2']) # error

补充:3.9之前的方法

​ 使用typing中的List。

from typing import List

def my_sum(lst: List[int]) -> int:
total = 0
for i in lst:
total += i
return total

my_sum([0, 1, 2])
my_sum([0, 1, '2']) # error

标注容器中的元素(sequence抽象版本)

​ 有时候希望传入的可以是一个list,也可以是一个tuple,或者一个range,一个byte等等。可以使用更加抽象的容器:Sequence

from typing import Sequence

def my_sum(lst: Sequence[int]) -> int:
total = 0
for i in lst:
total += i
return total

my_sum([0, 1, 2])
my_sum((0, 1, 2))
my_sum(b'012')
my_sum(range(3))

标注dict的key和value

def my_sum(d: dict[str, int]) -> int:
total = 0
for i in d.values():
total += i
return total

my_sum({"a": 1, "b": 2, "c": 3})
my_sum({"a": 1, "b": 2, "c": 'a'}) # error