Python的类型注解Annotation

Python 注解(Annotations) 注解是通过在变量名、函数名或类名后面紧跟一个冒号和表达式来定义的。在Python 3.5及以后的版本中,这些注解可以是任何有效的Python表达式,但最常见的用法是类型提示。# 这里的: str 是对函数参数name的类型注解# 而 -> str 则是对函数返回值的类型注解 阅读详情

Python函数类型注解的方式

因为当Python用于大型项目时候,没有类型这个Python的特征的弱点就暴露出来,特别是项目中人员层次参差不齐,项目中就会产生各种bug。
虽然动态语言Python虽然无法解决没有类型的这个问题,但是它也做了一些折中方案。

加help文档(3.5以后)

def add(x, y) ->int: # 函数注释,非强制类型要求
    """
    :param x: int
    :param y: int
    :return: int
    """
    return x + y
help(add)
Help on function add in module __main__:

add(x:str, y:int) -> int
    :param x: int
    :param y: int
    :return: int

形参和返回值注解(Python3.5以上)

这仅仅是用声明,不是强制要求。Pycharm会根据这个指定类型做类型推断。

def add(x:int, y) ->int: # 函数注释,非强制类型要求
                            #x要求是int;add返回值要求是int。
    return x + y
help(add)

Help on function add in module __main__:

add(x:int, y) -> int

标识符注解(Python3.6以后)

a:int = 1

Python按照参数注解做类型检查

如果我们尝试用annotation做判断,可得到看似正确的结果,但问题是只有在Python3.6下字典才有被记录字典输入顺序。
不过,我们可以把这个需求作为一个练习:

def check(fn):
    def wrapper(*args, **kwargs):
        print(fn.__annotations__)
        list_anno_values = list(fn.__annotations__.values())
        print(list_anno_values)

        for index, para in enumerate(args):
            print(para, list_anno_values[index])  # 如果True说明送参类型正确
            print(isinstance(para, list_anno_values[index]))

        for k, v in kwargs.items():
            print(v, fn.__annotations__[str(k)]) # 如果True说明送参类型正确;False说明送参错误
            print(isinstance(v, fn.__annotations__[str(k)]))

            ret = fn(*args, **kwargs)
        return ret

    return wrapper


@check  # add = check(add) #add=>wrapper
def add(x: int, y: int) -> int:
    return x + y


add(4, y=5)
{'x': <class 'int'>, 'y': <class 'int'>, 'return': <class 'int'>}
[<class 'int'>, <class 'int'>, <class 'int'>]
4 <class 'int'>
True
5 <class 'int'>
True





9
Python语言 的注解(Annotations) Python中,注解通常是用于函数参数和返回值的类型提示。它们是可选的,用于提供一个有关参数及返回值类型的附加信息。注解并不会影响代码的运行,但却为开发者提供了有价值的信息。这样的特性在大型项目中尤其重要,因为它可以帮助开发者更快速地理解和维护代码。此外,可以使用TypeVar定义自己的泛型类型。这样可以创建更复杂的类型系统。例如:```python```在这个例子中,函数接收一个元素列表,并返回列表中的第一个元素。使用TypeVar允许我们在多个类型上使用这一函数。 阅读详情

相关推荐

python画路飞代码_用 Type Annotation 提升你的 Python 代码健壮性

0x00 前言本文是《提升你的 Python 项目代码健壮性和性能》系列的第一篇文章。本系列仅仅从笔者的项目经历来讲解一些提升代码健壮性的姿势和小技巧。本文目录如下:▼ 0x00 前言 : section ▼ 0x01 Gradual Typing : section 静态类型 VS 动态类型 : section Gradual Typing = 静态类型 + 动态类型 : section...

weixin_30375113的博客 386

pythonannotation介绍

pythonannotation介绍

cnds123的专栏 3831

python类型注解

类型注解类型 --- Generic Alias 、 Union

岁月的博客 890

Python 标注(annotation)

函数标注(function annotation) Python函数标注(function annotation)是关于用户自定义函数中使用的类型的完全可选元数据信息。 函数标注 以Python字典的形式存放在函数的 annotations 属性中,并且不会影响函数的任何其他部分。 形参标注的定义方式是在形参名称后加上冒号,后面跟一个表达式,该表达式会被求值为标注的值。 返回值标注的定义方式是加上...

flyincyclone的博客 6546

python类型注解_Python类型注解Annotation:一分钟学会

Python函数类型注解的方式因为当Python用于大型项目时候,没有类型这个Python的特征的弱点就暴露出来,特别是项目中人员层次参差不齐,项目中就会产生各种bug。 虽然动态语言Python虽然无法解决没有类型的这个问题,但是它也做了一些折中方案。加help文档(3.5以后)def add(x, y) ->int: # 函数注释,非强制类型要求""":param x: int:param y...

weixin_39867212的博客 415

powerdesign没有int类型_Python类型注解Annotation:一分钟学会

Python函数类型注解的方式因为当Python用于大型项目时候,没有类型这个Python的特征的弱点就暴露出来,特别是项目中人员层次参差不齐,项目中就会产生各种bug。 虽然动态语言Python虽然无法解决没有类型的这个问题,但是它也做了一些折中方案。加help文档(3.5以后)def add(x, y) ->int: # 函数注释,非强制类型要求 """ :param x...

weixin_39989875的博客 120

16类型注解

python类型注解函数定义的弊端:python是动态语言,变量随时可以被赋值,且能赋值为不同的类型python不是静态编译型语言,变量类型是在运行时决定的;动态语言很灵活,但这种特性也是弊端:难发现,由于不做任何类型检查,直到运行时问题才显现出来,或在线上才能暴露出问题;难使用,函数的使用者看到函数时,并不知道设计者是如何设计的函数,也不知道应该传入什么类型的数据;...

weixin_34221332的博客 203

python3.8版本执行labelme,出现TypeError: ‘type‘ object is not subscriptable解决方式

记录人生,分享知识

hello000w的博客 6576

Python type hints 调研

Python type hints 调研 参考链接: 官网https://docs.python.org/3/library/typing.html https://ocavue.com/python_typing.html https://blog.csdn.net/chuchus/article/details/77891128 https://www.cnblogs.com/er...

duxin_csdn的博客 1308

Python中typing 模块和类型注解的使用

类型注解Python 3.5 中,Python PEP 484 引入了类型注解(type hints),在 Python 3.6 中,PEP 526 又进一步引入了变量注解(Variable Annotations),所以上面的代码我们改写成如下写法: a: int = 2 print('5 + a =', 5 + a) def add(a: int) -> int: return a + 1 具体的语法是可以归纳为两点: 在声明变量时,变量的后面可以加一个冒号,后面再写上变

GC 2222

Python 3.15强制校验不是加个--check-types就行:4层校验栈(语法层/AST层/字节码层/运行时层)逐级拆解

Python 3.15 类型注解强制校验需穿透语法层、AST层、字节码层与运行时层四重机制,非简单命令行开关可实现。适用于高可靠性系统开发,兼顾静态安全与动态灵活性,显著提升类型可信度。值得收藏

BreakVein的博客 219

Python类型注解

类型注解(Type Annotations)是 Python 的一种语法,用于在代码中标注变量、函数参数和返回值的类型。这可以帮助开发者理解代码的意图,并且在一些开发工具和静态分析工具中提高代码的可读性和可维护性。类型注解Python 3.5 引入,并在 Python 3.6 之后得到了进一步的完善。

Lzcsfg的博客 1892

Python中的参数注解和类型注解

类型注解与参数数据 python3.5后增加了参数注解 python3.5后引入函数注解 对函数的参数进行类型注解 对函数的返回值进行类型注解 对函数参数做义工辅助的说明,并不对函数参数进行类型检查 提供给第三方工具,做代码分析,发现隐藏的bug 函数的注解信息保存在__annotations__属性中 python3.6后增加了类型注解 python3.6后引入变量注解 参数注解示例: ...

兰枫 5617

python 类型注解

类型注解不会改变程序的实际运行行为,但能提高代码的可读性和便于静态分析工具、IDE 提供更好的代码补全和错误检查支持。通过这些工具和实践,类型注解不仅能提高个人编码效率,也能提升团队协作的代码质量,减少因类型错误导致的Bug。不过,合理使用类型注解,避免过度注解导致代码可读性下降,保持代码的简洁与清晰是关键。协议与抽象基 3.8 引入了协议(Protocol),它是类型提示中的一种抽象基类,用于定义接口规范,而不需要继承。对于类的方法和属性,也可以使用类型注解来指定它们的类型或返回类型

adfksdfhkshdufh的博客 452

Python 3 新特性:类型注解——类似注释吧,反正解释器又不做校验

Python 3 新特性:类型注解 Crossin ​ 上海交通大学 计算机应用技术硕士 95 人赞同了该文章 前几天有同学问到,这个写法是什么意思: def add(x:int, y:int) -> int: return x + y 我们知道 Python 是一种动态语言,变量以及函数...

djph26741的博客 404

Python 3.5 类型注解

大家好,我是只谈技术不剪发的 Tony 老师。 今天给大家介绍的小技巧是 Python 3.5 引入的函数参数和返回值类型注解(type annotations)。例如: >>> def my_add(a: int, b: int) -> int: return a + b >>> my_add(1, 2) 3 >>> my_add('a', 'b') 'ab' Python 是一种动态类型的语言,以上函数仍然可以接受非整数类型

Tony.Dong的专栏 675
上一篇: Python匿名函数Lambda:想明白这些练习结果,Lambda才算懂了
下一篇: 一篇认真的正则入门文章:正则表达式数字和数字范围匹配表达
曼巴的脚步
博客等级 码龄18年 23粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值