Python:类型注解、inspect

本文探讨了Python动态语言定义的弊端,如类型检查困难和文档更新不一致,然后介绍了通过函数注解和inspect模块来解决这些问题。Python 3.5引入的函数注解提供了参数和返回值的类型辅助说明,而inspect模块则用于获取对象信息,包括检查函数参数。文章还展示了如何在业务中使用inspect模块进行参数检查,确保用户输入符合函数注解的要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

函数定义的弊端

如何解决这种动态语言定义的弊端尼

 业务应用

inspect模块

inspect模块is

业务中适合使用

函数定义的弊端

Python是动态语言,变量随时可以被赋值,且能赋值为不同的类型

Python不是静态编译型语言,变量类型是在运行器决定的

动态语言很灵活,但是这种特性也是弊端

def  add(x,y):
    return x + y

print(add(1,2))
print(add("Hello","Word"))
print(add(1,"Word"))   #Python是强类型这里会报错
  • 难发现:由于不做任何类型检查,直到运行期问题才显现出来,或者线上运行时才能暴露出问 题
  • 难使用:函数的使用者看到函数的时候,并不知道你的函数的设计,并不知道应该传入什么类 型的数据

如何解决这种动态语言定义的弊端尼

1、 增加文档Documentation String

  • 函数提供说明文档【但是函数定义更新了,文档未必同步更新】
def  add(x,y):
    '''
    :param int:x: 
    :param int:y: 
    :return int: 
    '''
    return x + y

print(add(1,2))
print(add("Hello","Word"))
print(add(1,"Word"))

2、函数注解

  •  Python 3.5引入的
  • 对函数的参数进行类型注解
  • 对函数的返回值进行类型注解
  • 只对函数参数做一个辅助的说明,并不对函数参数进行类型检查
  • 提供给第三方工具,做代码分析,发现隐藏的bug
  • 函数注解的信息,保存在__annotations__属性

3、变量注解

  • Python 3.6引入【i : int = 3】

 业务应用

函数参数类型检查

  • 函数参数的检查,一定是在函数外
  • 函数应该作为参数,传入到检查函数中
  • 检查函数拿到函数传入的实际参数,与形参声明对比
  • __annotations__属性是一个字典,其中包括返回值类型的声明。假设要做位置参数的判断,无 法和字典中的声明对应。使用inspect模块

inspet模块

  • 提供获取对象信息的函数,可以检查函数和类、类型检查

 

inspect模块

Parameter对象

  • 保存在元组中,是只读的
  • name,参数的名字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值