文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python typing模块--类型提示支持

2024-04-02 19:55

关注

1、typing介绍

Python是一门弱类型的语言,很多时候我们可能不清楚函数参数的类型或者返回值的类型,这样会导致我们在写完代码一段时间后回过头再看代码,忘记了自己写的函数需要传什么类型的参数,返回什么类型的结果,这样就不得不去阅读代码的具体内容,降低了阅读的速度, typing 模块可以很好的解决这个问题

注意: typing 模块只有在python3.5以上的版本中才可以使用,pycharm目前支持typing检查

2、typing的作用

3、常用类型

除了以上常用的类型,还支持 Any Union Tuple Callable TypeVar Generic 类型组成。有关完整的规范,请参阅 PEP 484 。有关类型提示的简单介绍,请参阅 PEP 483

3.1 代码示例

我们可以发现,func函数要求传入的第2个参数为 str 类型,而我们调用时传入的参数是 int 类型,此时Pycharm就会用黄色来警告你,我们将光标放到黄色的地方,会出现下面的提示

写着期望类型是 str ,而现在是 int ,但是 typing 的作用仅仅是提示,并不会影响代码执行,我们执行看看

执行结果如下:

[2, 3]

我们会发现并没有报错,因为 typing 仅仅是起到了提醒的作用

4、typing模块的其他用法

4.1 类型别名

类型别名,就是给复杂的类型取个别名


# 给List[float]类型取个别名为Vector
Vector = List[float]


def scale(scalar: float, vector: Vector) -> Vector:
    return [scalar * num for num in vector]

new_vector = scale(2.0, [1.0, -4.2, 5.4])

当然,类型别名我们完全可以不用,用以下写法也一样,看个人喜好


def scale(scalar: float, vector: List[float]) -> List[float]:
    return [scalar * num for num in vector]


4.2 NewType

官网看了下,个人觉得这个没啥用,就不细写了

4.3 Callable

期望特定签名的回调函数的框架可以将类型标注为 Callable[[Arg1Type, Arg2Type], ReturnType]

[Arg1Type, Arg2Type]:代表参数类型
ReturnType:代表返回值类型


from typing import Callable


def get_next_item(name: str):
    print(name)

# Callable 作为函数参数使用,其实只是做一个类型检查的作用,检查传入的参数值 get_next_item 是否为可调用对象
def feeder(get_next_item: Callable[[str], None]) -> (str):
    return get_next_item


v1 = feeder(get_next_item)
v1('hello')

# 结果
hello

4.4 TypeVar泛型

可以自定义一个任意类型,也可以自定义指定类型

自定义一个任意类型


# 自定义一个任意类型
T = TypeVar('T')


def func(user: T) -> T:
    print(user)
    return user


func('1')
func(1)
func([1])
func((1, 2))
func({"status": 200})

# 结果
1
1
[1]
(1, 2)
{'status': 200}


自定义指定类型


# 指定为int或者str
a = TypeVar('a', int, str)

s1: a = 1
s2: a = 'aaa'
s3: a = []  # 这里定义了列表,pycharm会出现黄色警告

print(s1, s2, s3)

# 结果
1 aaa []

4.5 Any

Any 是一种特殊的类型。静态类型检查器认为所有类型均与 Any 兼容,同样, Any 也与所有类型兼容。

也就是说,可对 Any 类型的值执行任何操作或方法调用,并赋值给任意变量:


from typing import Any

a = None    # type: Any
a = []      # OK
a = 2       # OK

s = ''      # type: str
s = a       # OK

def foo(item: Any) -> int:
    # Typechecks; 'item' could be any type,
    # and that type might have a 'bar' method
    item.bar()
    ...

此外,未指定返回值与参数类型的函数,都隐式地默认使用 Any


def legacy_parser(text):
    ...
    return data

# 两种写法效果是一样的
def legacy_parser(text: Any) -> Any:
    ...
    return data

4.6 Union

Union类型语法格式: Union[X, Y] ,相当于 X | Y ,意思是类型是X或者Y

如果我们想定义 Union 类型,就要写成如下的eg: Union[X, Y] ,或者也可以使用缩写X | Y(此写法python3.10版本才支持)


from typing import Union

# 指定变量a的类型为int或者str
a: Union[int, str]
a = 1
print(a)

a = []  # 定义了一个列表,pycharm会有黄色警告提示

到此这篇关于python typing模块--类型提示支持的文章就介绍到这了,更多相关python typing模块内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯