资讯专栏INFORMATION COLUMN

​Python 3 新特性:类型注解

hikui / 3053人阅读

前几天有同学问到,这个写法是什么意思:


def add(x:int, y:int) -> int:
    return x + y

我们知道 Python 是一种动态语言,变量以及函数的参数是 不区分类型 。因此我们定义函数只需要这样写就可以了:


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

这样的好处是有极大的灵活性,但坏处就是对于别人代码,无法一眼判断出参数的类型,IDE 也无法给出正确的提示。

于是 Python 3 提供了一个新的特性:
函数注解

也就是文章开头的这个例子:


def add(x:int, y:int) -> int:
    return x + y

: 类型 的形式指定函数的 参数类型 ,用 -> 类型 的形式指定函数的 返回值 类型。

然后特别要强调的是,Python 解释器 并不会 因为这些注解而提供额外的校验,没有任何的类型检查工作。也就是说,这些类型注解加不加,对你的代码来说
没有任何影响

输出:

但这么做的好处是:

让别的程序员看得更明白

让 IDE 了解类型,从而提供更准确的代码提示、补全和语法检查(包括类型检查,可以看到 str 和 float 类型的参数被高亮提示)

在函数的 __annotations__ 属性中会有你设定的注解:

输出:

在 Python 3.6 中,又引入了对 变量类型 进行注解的方法:


a: int = 123
b: str = "hello"

更进一步,如果你需要指明一个全部由整数组成的列表:


from typing import List
l: List[int] = [1, 2, 3]

但同样,这些仅仅是“ 注解 ”,不会对代码产生任何影响。

不过,你可以通过 mypy 库来检验最终代码是否符合注解。

安装 mypy:


pip install mypy

执行代码:


mypy test.py

如果类型都符合,则不会有任何输出,否则就会给出类似输出:

这些新特性也许你并不会在代码中使用,不过当你在别人的代码中看到时,请按照对方的约定进行赋值或调用。

当然,也不排除 Python 以后的版本把类型检查做到解释器里,谁知道呢。

════
其他文章及回答:

如何自学Python |
新手引导 |
精选Python问答
| Python单词表 |
区块链 |
人工智能

欢迎关注: Crossin的编程教室

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42015.html

相关文章

  • Python标准库---13、内置类型:二进制序列类型 ( bytes, bytearray)

    摘要:上一篇文章标准库内置类型文本序列类型下一篇文章二进制序列类型操作二进制数据的核心内置类型是和。另请参见内置类型。存在一个反向转换函数,可以将对象转换为对应的十六进制表示。返回子序列在范围内非重叠出现的次数。 上一篇文章:Python标准库---12、内置类型:文本序列类型(str)下一篇文章: 二进制序列类型 --- bytes, bytearray, memoryview 操作二进制...

    gekylin 评论0 收藏0
  • Python学习之路24-一等函数

    摘要:函数内省的内容到此结束。函数式编程并不是一个函数式编程语言,但通过和等包的支持,也可以写出函数式风格的代码。 《流畅的Python》笔记。本篇主要讲述Python中函数的进阶内容。包括函数和对象的关系,函数内省,Python中的函数式编程。 1. 前言 本片首先介绍函数和对象的关系;随后介绍函数和可调用对象的关系,以及函数内省。函数内省这部分会涉及很多与IDE和框架相关的东西,如果平时...

    wind3110991 评论0 收藏0
  • Java 8 特性之重复注解类型注解

    摘要:概述简介对注解处理提供了两点改进,可重复的注解及可用于类型的注解重复注解要想定义重复注解,必须给它定义的容器类,还要使用注解修饰一下容器类测试方法获取方法上的注解类型注解就是向添加一种类型使用本文首发于凌风博客新特性之重复注解与类型注解作者 1. 概述 1.2 简介 Java 8 对注解处理提供了两点改进,可重复的注解及可用于类型的注解 2. 重复注解 要想定义重复注解,必须给它定义的...

    psychola 评论0 收藏0
  • 乐字节-Java8特性之Base64和重复注解类型注解

    摘要:上一篇小乐给大家说了乐字节新特性之,接下来小乐继续给大家说一说新特性之和重复注解与类型注解。内部类与方法相关的内部类这是一个静态类。也是一个静态类。 上一篇小乐给大家说了《乐字节-Java8新特性之Date API》,接下来小乐继续给大家说一说Java8新特性之Base64和重复注解与类型注解。 一、Base64 在Java 8中,内置了Base64编解码相关的特性。Java 8中使用...

    1treeS 评论0 收藏0
  • 聊聊 Java8 以后各个版本的特性

    摘要:于是抽时间看了看以后各个版本的特性,做了一个总结。年和公开版本发布,取名为。此后对应版本就是,。发布,是一个重大版本更新。在此之后,就是每六个月发布一次新版本。以上和参考资料聊了一些关于的历史,下面我们看看各个版本有那些新特性。 【这是 ZY 第 11 篇原创技术文章】 某天在网上闲逛,突然看到有篇介绍 Java 11 新特性的文章,顿时心里一惊,毕竟我对于 Java 的版本认识...

    K_B_Z 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<