Python 类型注解

为什么需要类型注解

在PyCharm中编写代码,我们经常能够见到如下提示:

 自动提示可用方法

         思考,为什么PyCharm工具能够做到这一点?

         它是如何知道这个对象有append方法?

         因为:PyCharm确定这个对象,是list类型

同样,我们换一份代码:

定义一个函数func,接收一个参数data

你会发现,PyCharm不会在做出任何提示了

         思考,为什么PyCharm工具无法提示了?

         因为:PyCharm不确定这个对象是什么类型

又或者当我们调用方法,进行传参的时候(快捷键ctrl + p弹出提示):

为什么内置模块random的方法可以提示类型

        自己定义的就不可以?

        因为PyCharm无法通过代码

        确定应传入什么类型

        我们需要使用类型注解

类型注解 

Python在3.5版本的时候引入了类型注解,以方便静态类型检查工具,IDE等第三方工具。

类型注解:在代码中涉及数据交互的地方,提供数据类型的注解(显式的说明)。

主要功能:

  • 帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示
  • 帮助开发者自身对变量进行类型注释

支持:

  • 变量的类型注解
  • 函数(方法)形参列表和返回值的类型注解

类型注解的语法

除了使用 变量: 类型, 这种语法做注解外,也可以在注释中进行类型注解。

语法: # type: 类型

# 在注释中进行类型注解
# 类对象类型注解
class Student:
    pass


def func():
    pass


var_1 = random.randint(1, 10)                  # type: int
var_2 = json.loads('{"name": "zhangsan"}')     # type: dict[str, str]
var_3 = func()                                 # type: Student

基础容器类型注解

my_list: list = [1, 2, 3]
my_tuple: tuple = (1, 2, 3)
my_set: set = {1, 2, 3}
my_dict: dict = {"itheima": 666}
my_ste: str = "abcdefghigh"

容器类型详细注解

my_list: list[int] = [1, 2, 3]
my_tuple: tuple[int, str, bool] = (1, "itheima", True)
my_dict: dict[str, int] = {"itheima": 666}
my_set: set[int, str] = {1, 2, "a"}

 注意:

  • 元组类型设置类型详细注解,需要将每一个元素都标记出来
  • 字典类型设置类型详细注解,需要2个类型,第一个是key第二个是value

 

变量的类型注解

为变量设置注解,显示的变量定义,一般无需注解:

my_list: list = [1, 2, 3]
my_tuple: tuple = (1, 2, 3)
my_set: set = {1, 2, 3, "a"}
my_dict: dict = {"itheima": 666}
my_str: str = "abcdefghigh"
my_student: Student = Student()

就算不写注解,也明确的知晓变量的类型

# 一般,无法直接看出变量类型之时
# 会添加变量的类型注解

class Student:
    pass



var_1 = random.randint(1, 10)                  
var_2 = json.loads('{"name": "zhangsan"}')
var_3 = func()                              

 类型注解的限制

类型注解主要功能在于:

  • 帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示
  • 帮助开发者自身对变量进行类型注释(备注)

并不会真正的对类型做验证和判断。

也就是,类型注解仅仅是提示性的,不是决定性的

如图代码,是不会报错的哦。

总结:

1. 什么是类型注解,有什么作用?

在代码中涉及数据交互之时,对数据类型进行显式的说明,可以帮助:

  • PyCharm等开发工具对代码做类型推断协助做代码提示
  • 开发者自身做类型的备注

2. 类型注解支持:

  • 变量的类型注解
  • 函数(方法)的形参和返回值的类型注解

3. 变量的类型注解语法

  • 语法1: 变量: 类型
  • 语法2: 在注释中,# type: 类型

4. 注意事项

  • 类型注解只是提示性的,并非决定性的。数据类型和注解类型无法对应也不会导致错误

函数(方法)的类型注解

函数(方法)的类型注解 - 形参注解

 如图所示:

  • 在编写函数(方法),使用形参data的时候,工具没有任何提示
  • 在调用函数(方法),传入参数的时候,工具无法提示参数类型

这些都是因为,我们在定义函数(方法)的时候,没有给形参进行注解

函数和方法的形参类型注解语法:

函数(方法)的类型注解 - 返回值注解

同时,函数(方法)的返回值也是可以添加类型注解的。 语法如下:

 总结:

1. 函数(方法)可以为哪里添加注解?

  • 形参的类型注解
  • 返回值的类型注解

2. 函数(方法)的类型注解语法?

注意,返回值类型注解的符号使用: ->

Union类型 (联合)

使用Union[类型, ......, 类型]

可以定义联合类型注解

my_list: list = [1, 2, 3]
my_dict:  dict[str: int] = {"a": 0, "b": 2}
my_dict:  dict[str: int] = {"a": 0, "b": 2}
my_list = [1, 2, 3, "a", "b"]

 使用Union联合注解

# 使用Union类型,必须先导包
from typing import Union

my_dict: dict[str:Union[str:int]] = {"a": 0, "b": 2, "c": "d"}
my_list: list[Union[int, str]] = [1, 2, "itheima", "itcast"]

 Union联合类型注解,在变量注解、函数(方法)形参和返回值注解中,均可使用。

 总结:

1. 什么是Union类型?

使用Union可以定义联合类型注解

2. Union的使用方式

  • 导包:from typing import Union
  • 使用:Union[类型, ......, 类型]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@明天更美好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值