[EuroPython2021笔记] Yoichi Takai: 在python 3.10中使用静态类

本文介绍了Yoichi Takai在EuroPython2021上关于在Python 3.10中使用静态类的演讲内容。讲解了静态类的好处,如何利用类型系统进行更严格的代码审查,包括使用内置类型、泛型集合、Union、Option、Callable等,并探讨了Python 3.9及3.10中的新特性。文章还对比了不同版本Python之间的类型使用差异,并讨论了TypeAlias和TypeGuards的概念。
摘要由CSDN通过智能技术生成

EuroPython今天又放出了几十个视频,于是我就挑了几个看。其中一个吸引我的就是关于在python 3.10中使用静态类的。演讲者是从日本连线过去的。欧洲人能大老远请他,肯定有两把刷子。

首先,我安装了python 3.10,今天去python的网站一看,今天正好3.10发布,怎么这么巧。我不下一个都不好意思了。

https://www.python.org/

安装完以后,我就跟着视频写代码了。

我的conda base是python 3.8,所以不用装了。我又装了一个python 3.6

conda create -n py36 python=3.6

这样,我可以在python 3.6, 3.8, 3.10 之间切换。

为什么使用静态类

python静态类已经有5年了。从2015的python 3.5就开始支持静态类了。

  • 代码使用者能知道类型
  • 他会报错
  • 当你在函数的返回值后面按点的时候,“自动完成”功能将可以使用

比如,我们可以比较以下示例

def without_typing(s):
    return "Hello " + s

without_typing(1)
def with_typing(s: str) -> str:
    return "Hello " + s

with_typing(1)

第一个示例没有type,第二个有。

当你直接运行他们的时候,他们都会报错

TypeError: can only concatenate str (not “int”) to str

但是如果没有类型,那么你只能在程序运行的时候,才知道错了。

而第二种写法,在编辑的时候,就会报错了。

这里,我试了vscode和pycharm。

vscode默认不报错,需要安装mypy,之后才会有错误提示。

VSCode安装mypy

按下F1,输入“Python: Select Linter”,然后选mypy

vscode的错误信息是:

Argument 1 to “with_typing” has incompatible type “int”; expected "str"mypy(error)

pycharm的错误信息是:

Expected type ‘str’, got ‘int’ instead

代码review的时候

def need_new_post():
    if ...: return None
    elif ...: return False
    else ...: return post_id # this is a string

如果没有类型限制,那么你的返回值可能有各种类型。这给这个函数的使用者造成了很大的困扰。

使用built-in类型

有5中built-in类型,可以直接使用,他们是:

bool, bytes, float, int, str

当然,你也可以直接使用None,比如,函数的返回值,可以是None。

你也可以用Any表示任意类型,

from typing import Any

python 3.9 里的泛型集合

集合有dict, frozenset, list, set, tuple

3.9以后他们可以在[]里面写上具体类型。

3.7和3.8, 需要引用

from __future__ import annotations

3.6,需要使用

from typing import List, Dict, Set, Tuple

假如,我们要打印一个str list里面的所有字符串,在python 3.6, 3.8, 3.10的代码分别是:

Python 3.6:

from typing import List

def print_all(l: List[str]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

织网者Eric

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

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

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

打赏作者

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

抵扣说明:

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

余额充值