狠狠撸

狠狠撸Share a Scribd company logo
Python 类型检查实践
2020.08
?录
? Quick Start

? 为什么要引?类型检查

? Python 类型检查功能详解

? 进阶知识
Quick Start
Quick Start
Quick Start
?录
? Quick Start

? 为什么要引?类型检查

? Python 类型检查功能详解

? 进阶知识
Why Go
? 静态类型:

? 编译期即可发现错误,便于维护和重构;

? 使? TS 或 Flow 可以让 Bug 减少 15%;

? 对提升性能也有帮助;

? Killer Apps: gRPC, Kubernetes, Prometheus, In?uxDB;

? ?歌背景,适合?型项?;

? 其它:??简单,?具完善,便于部署;

? 不会完全替代 Python、Java。
概念梳理
? 静态类型:在编译期进?类型检查;

? 动态类型:在运?期进?类型检查;

? 强类型:不允许隐式类型转换;

? 弱类型:允许隐式类型转换;
静态类型的优点
? 更早发现 Bug;

? 提升代码可读性;

? 优化代码提示;

? 协助代码重构;

? 提升性能;

? 缺点:

? 额外的?作量;

? 牺牲灵活性;
静态类型的优点
? 更早发现 Bug;

? 提升代码可读性;

? 优化代码提示;

? 协助代码重构;

? 提升性能;

? 缺点:

? 额外的?作量;

? 牺牲灵活性;
静态类型的优点
? 更早发现 Bug;

? 提升代码可读性;

? 优化代码提示;

? 协助代码重构;

? 提升性能;

? 缺点:

? 额外的?作量;

? 牺牲灵活性;
其他语??较
TypeScript Hack
?录
? Quick Start

? 为什么要引?类型检查

? Python 类型检查功能详解

? 进阶知识
相关 PEP
? PEP 3107 Function Annotation (Python 3.0)

? PEP 483 The Theory of Type Hints (Python 3.5)

? PEP 484 Type Hints (Python 3.5)

? PEP 526 Syntax for Variable Annotations (Python 3.6)

? PEP 563 Postponed Evaluation of Annotations (Python 3.7)

? PEP 544 Protocols (Python 3.8)

? PEP 589 TypedDict (Python 3.8)

? PEP 591 Adding a ?nal quali?er to typing (Python 3.8)
渐进式类型检查
? 只检查有类型标注的代码;

? 变量类型默认为 Any:

? 任何类型的变量都可以赋值给 Any;

? Any 可以作为任意类型使?;

? Any vs. object

? 如果函数签名没有做类型标注,则函数内的本地变量不会做类型推导。
类型标注的三种?式
1. 注解 2. 注释
3. 接??件 *.pyi
Typeshed
? github.com/python/typeshed

? stdlib

? third_party

? ?ask

? requests

? dateutil
常?类型
类
?录
? Quick Start

? 为什么要引?类型检查

? Python 类型检查功能详解

? 进阶知识
Generics
Duck Typing
? collections.abc

? Container: __contains__

? Sized: __len__

? Iterable: __iter__

? Collection: __contains__, __len__, __iter__

? Sequence: Collection, __getitem__, index, count

? MutableSequence: Sequence, __setitem__

? Mapping: Collection, __getitem__, get, items

? typing

? Sequence[int]

? List[int]
Duck Typing
Runtime Validation
谢谢

More Related Content

Python 类型检查实践