【python】给函数参数和返回值标注类型

目录

(1)类型标注进化历史

从Python 3.0开始的类型标注

从Python 3.5开始的类型标注库 typing

(2)更细化的类型标注

1.返回一个列表,且列表的元素类型是指定的

2.返回字典类型,键和值都是指定类型

3.返回自定义类型


(1)类型标注进化历史

从Python 3.0开始的类型标注

Python 3.0开始,Python 已经支持基础的类型标注,例如,你可以在函数声明中这样写:

def func(a: int, b: str) -> bool:
    return b.isdigit() and a > int(b)

这里的int, str, bool都是类型标注,他们说明了函数参数和返回值的类型。

从Python 3.5开始的类型标注库 typing

从 Python 3.5开始,Python 增加了一个新的模块,叫做typing。这个模块定义了很多用于类型标注的类和函数,包括一些容器类型,例如List, Dict, Tuple等。

from typing import List, Dict 


def func(a: List[int], b: Dict[str, int]) -> bool: 
    p1 = all(isinstance(x, int) for x in a)
    p2 = all(isinstance(k, str) and isinstance(v, int) for k, v in b.items())
    ret = p1 and p2 
    return ret

这里的List[int]和Dict[str, int]是类型标注,他们分别表示一个整数列表和一个以字符串为键,整数为值的字典。

(2)更细化的类型标注

1.返回一个列表,且列表的元素类型是指定的

如果你想要指定一个函数返回一个列表,且列表的元素具有特定类型,你可以使用类型提示来实现。以下是一个简单的例子:

from typing import List

def create_list_of_integers(length: int) -> List[int]:
    result = [i for i in range(length)]
    return result

# 调用函数
my_list = create_list_of_integers(5)
print(my_list)

在这个例子中,create_list_of_integers 函数接受一个整数参数 length,并返回一个包含整数的列表。通过在函数声明中使用 -> List[int],我们明确了返回的是整数类型的列表。

如果你的函数返回的列表包含不同类型的元素,你可以使用 Union 类型来表示这个混合类型的列表。例如:

from typing import List, Union

def create_mixed_list(length: int) -> List[Union[int, str]]:
    result = [i if i % 2 == 0 else str(i) for i in range(length)]
    return result

# 调用函数
mixed_list = create_mixed_list(5)
print(mixed_list)

在这个例子中,create_mixed_list 函数返回一个包含整数和字符串的列表。使用 Union[int, str] 来表示列表的元素类型可以容纳这两种不同的数据类型。

2.返回字典类型,键和值都是指定类型

如果你想要指定一个函数返回一个字典,且字典的键和值都具有特定的类型,你可以使用类型提示。以下是一个例子:

from typing import Dict

def create_dict_of_integers(length: int) -> Dict[int, int]:
    result = {i: i * 2 for i in range(length)}
    return result

# 调用函数
my_dict = create_dict_of_integers(5)
print(my_dict)

在这个例子中,create_dict_of_integers 函数接受一个整数参数 length,并返回一个字典,其中键和值都是整数类型。通过在函数声明中使用 -> Dict[int, int],我们明确了返回的字典的键和值的类型。

如果你的函数返回的字典包含不同类型的键和值,你可以使用 Dict 和 Union 类型。例如:

from typing import Dict, Union

def create_mixed_dict(length: int) -> Dict[Union[int, str], Union[int, str]]:
    result = {i: str(i) if i % 2 == 0 else i for i in range(length)}
    return result

# 调用函数
mixed_dict = create_mixed_dict(5)
print(mixed_dict)

在这个例子中,create_mixed_dict 函数返回一个包含整数和字符串的字典,使用 Dict[Union[int, str], Union[int, str]] 来表示字典的键和值的混合类型。

3.返回自定义类型

像下面这样,自定义了一个DataInfo类,函数get_data_info()指定返回一个列表,且列表的元素类型必须为DataInfo。

from typing import List, Dict


class DataInfo(object):
    def __init__(self):
        self.name = "tom"
        self.age = 18
        self.value_list = []
        self.test_ret = 0.3789
        self.income_dict = dict()


def get_data_info() -> List[DataInfo]:
    m = DataInfo()
    x = [m]
    return x


ret = get_data_info()
print(ret[0].test_ret)

end

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值