基本类型注解

【一】基本类型注解

【1】基础语法

  • 定一个函数,参数名和返回值都有类型提示

  • 参数类型就是弱约束,函数返回值也是弱约束(意思就是也可以不遵守类型)

def process_example(参数名: 参数类型) -> 返回值类型:
    代码块
    return  返回值
翻译:process_example(流程示例)

【2】内置类型

  • typing模块中提供了与Python内置类型相对应的类型提示,如:

    • int, float, str, bool, bytes, complex

(1)整数类型

# 定义一个名为process_int的函数,接收一个整型参数data,并无返回值(None)
# 函数作用:打印传入数据data的值及其类型
def process_int(data: int) -> None:
    print(f"the data is {data} and the type is {type(data)}")

(2)浮点数类型

# 定义一个名为process_float的函数,接收一个浮点型参数data,并无返回值(None)
# 函数作用:打印传入数据data的值及其类型
def process_float(data: float) -> None:
    print(f"the data is {data} and the type is {type(data)}")

(3)字符串类型

# 定义一个名为process_str的函数,接收一个字符串型参数data,并无返回值(None)
# 函数作用:打印传入数据data的值及其类型
def process_str(data: str) -> None:
    print(f"the data is {data} and the type is {type(data)}")

(4)布尔类型

# 定义一个名为process_bool的函数,接收一个布尔型参数data,并无返回值(None)
# 函数作用:打印传入数据data的值及其类型
def process_bool(data: bool) -> None:
    print(f"the data is {data} and the type is {type(data)}")

【3】类型别名

  • typing模块中有多种内置的类型别名

  • 比如ListTupleDictSetFrozenset等,可以用于注解变量和函数的预期类型。

(1)列表类型

# 导入List类型模块以支持类型注解
from typing import List
​
# 定义一个名为process_numbers的函数,接收一个整数列表(List[int])类型的参数data,并无返回值(None)
# 函数作用:打印传入数据data是一个整数列表,以及列表中的每个元素都是整数类型,同时输出数据本身
def process_numbers(data: List[int]) -> None:
    print(f'this is a number list , the data is {data}  , every item is int and the type is {type(data)}')
(2)字典类型
# 导入Dict类型模块以支持类型注解
from typing import Dict
​
# 定义一个名为process_dict的函数,接收一个字典(Dict[str, int])类型的参数data,其中键为字符串(str),值为整数(int),并无返回值(None)
# 函数作用:打印传入数据data是一个字典,键为字符串类型,值为整数类型,同时输出数据本身
def process_dict(data: Dict[str, int]) -> None:
    print(f"this is a dict, the data is {data} , the key is str , the value is int")

(3)元组类型

# 导入Tuple类型模块以支持类型注解
from typing import Tuple
​
# 定义一个名为process_tuple的函数,接收一个元组(Tuple[str])类型的参数data,其中元素为字符串(str),并无返回值(None)
# 函数作用:打印传入数据data是一个元组,所有元素均为字符串类型,同时输出数据本身
def process_tuple(data: Tuple[str]) -> None:
    print(f"this is a tuple, the data is {data} , the item is str")

(4)集合类型

# 导入Set类型模块以支持类型注解
from typing import Set

# 定义一个名为process_set的函数,接收一个集合(Set[int])类型的参数data,其中元素为整数(int),并无返回值(None)
# 函数作用:打印传入数据data是一个集合,所有元素均为整数类型,同时输出数据本身
def process_set(data: Set[int]) -> None:
    print(f"this is a set, the data is {data} , the item is int")

【4】Any(表示任意类型)

  • 用于无法确定具体类型或允许返回任意类型

# 导入Any类型模块以支持类型注解,Any表示允许任何类型的数据
from typing import Any

# 定义一个名为process_any_data的函数,接收一个Any类型的参数data,表示该参数可以是任何类型的数据
# 函数没有返回值,声明为None
def process_any_data(data: Any) -> None:

    # 使用f-string格式化输出,打印一条信息,内容为:"this is a data can be any type: {data}"
    # 其中"data"处会被实际传入的data变量的值替换
    print(f"this is a data can be any type: {data}")

【5】Union类型(允许接收多种不同类型的数据)

# 导入Union类型模块以支持类型注解
# Union允许函数接收多种类型作为参数或返回值
from typing import Union

# 定义一个名为double_or_square的函数,接收一个联合类型(Union[int, float])的参数number,可以是整数(int)或浮点数(float)
# 函数返回值也为联合类型(Union[int, float]),即返回结果可能是整数或浮点数
def double_or_square(number: Union[int, float]) -> Union[int, float]:

    # 使用isinstance()函数检查传入的number参数是否为整数类型(int)
    if isinstance(number, int):

        # 如果number是整数,则将其乘以2并返回结果
        return number * 2

    # 否则,认为number为浮点数(else分支对应非int类型,这里假设只能是float)
    else:

        # 将number取平方(计算其二次幂)并返回结果
        return number ** 2

【6】Optional类型(参数可以是指定类型或者None

# 导入Optional类型模块以支持类型注解
# Optional[str]表示字符串类型或None
from typing import Optional

# 定义一个名为greet的函数,接收一个Optional[str]类型的参数name,表示该参数可以是字符串类型或None
# 函数返回一个str类型的结果
def greet(name: Optional[str]) -> str:

    # 如果传入的name参数非空(即存在有效值)
    if name:
        # 使用f-string格式化输出,返回一条问候语,内容为:"Hello, {name}!"
        # 其中{name}处会被实际传入的name变量的值替换
        return f"Hello, {name}!"

    # 否则,当name参数为空(None)时
    else:
        # 返回默认问候语:"Hello, World!"
        return "Hello, World!"

【二】总结

  • typing模块为Python添加了静态类型注解的能力,提高了代码的可读性和维护性。

  • 本文介绍了类型注解的基本概念、常见类型和高级类型,以及类型检查工具的使用。

  • 希望读者可以更好地应用类型注解,改善Python代码的质量。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值