如何评价最近爆红的FastAPI?
Posted 测试小扎
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何评价最近爆红的FastAPI?相关的知识,希望对你有一定的参考价值。
一度觉得 sanic是python web框架的未来,支持异步,性能好,类flask的语法,代码简单,没想到被fastapi截胡了,fastapi在github的上星速度非常快。它在怎么样把后端api做好的这件事情上,做的比sanic更全面,更彻底。
FastAPI
FastAPI 是用于构建 Web API 的现代、开源、快速、高性能的 Web 框架,它基于Python 3.6+ 标准类型提示,支持异步,正如它的名字,FastAPI 就是为构建快速的 API 而生。
优点
- 速度快:可与 NodeJS 和 Go 比肩的极高性能(归功于 Starlette 和 Pydantic),是最快的 Python 网络框架之一
- 开发快:开发速度提高约 200% 至 300%
- Bug 少:人为错误减少约 40%*
- 智能:强大的编辑器支持,处处皆可自动补全,减少调试时间
- 简单:易学、易用,阅读文档所需时间更短
- 简短:代码重复最小化,通过不同的参数声明实现丰富功能,Bug 更少
- 健壮:生产级别的代码,还有自动交互文档
- 标准:完全兼容并基于 API 开放标准:OpenAPI 和 JSON Schema
缺点
由于 FastAPI 相对较新,因此与其他框架相比,社区较小,第三方的教程相对较少。
用例
FastAPI 适用于构建高性能的 API,本身支持异步,如果要构建异步 API,可以优先选择 FastAPI。Netflix 将其用于内部危机管理。它还可以在部署准备就绪的机器学习模型时完美缩放,因为当 ML 模型封装在 REST API 并部署在微服务中时,它在生产中会发挥最佳作用。
特性
FastAPI 特性
FastAPI 提供了以下内容:
基于开放标准
- 用于创建 API 的 OpenAPI 包含了路径操作,请求参数,请求体,安全性等的声明。
- 使用 JSON Schema (因为 OpenAPI 本身就是基于 JSON Schema 的)自动生成数据模型文档。
- 经过了缜密的研究后围绕这些标准而设计。并非狗尾续貂。
- 这也允许了在很多语言中自动生成客户端代码。
自动生成文档
交互式 API 文档以及具探索性 web 界面。因为该框架是基于 OpenAPI,所以有很多可选项,FastAPI 默认自带两个交互式 API 文档。
- Swagger UI,可交互式操作,能在浏览器中直接调用和测试你的 API 。
- 另外的 API 文档:ReDoc
更主流的 Python
全部都基于标准的 Python 3.6 类型声明(感谢 Pydantic )。没有新的语法需要学习。只需要标准的 Python 。
如果你需要2分钟来学习如何使用 Python 类型(即使你不使用 FastAPI ),看看这个简短的教程:Python Types。
编写带有类型标注的标准 Python:
from datetime import date
from pydantic import BaseModel
# Declare a variable as a str
# and get editor support inside the function
def main(user_id: str):
return user_id
# A Pydantic model
class User(BaseModel):
id: int
name: str
joined: date
可以像这样来使用:
my_user: User = User(id=3, name="John Doe", joined="2018-07-19")
second_user_data =
"id": 4,
"name": "Mary",
"joined": "2018-11-30",
my_second_user: User = User(**second_user_data)
Info**second_user_data
意思是:
直接将second_user_data
字典的键和值直接作为key-value参数传递,等同于:User(id=4, name="Mary", joined="2018-11-30")
编辑器支持
整个框架都被设计得易于使用且直观,所有的决定都在开发之前就在多个编辑器上进行了测试,来确保最佳的开发体验。
在最近的 Python 开发者调查中,我们能看到 被使用最多的功能是"自动补全"。
整个 FastAPI 框架就是基于这一点的。任何地方都可以进行自动补全。
你几乎不需要经常回来看文档。
在这里,你的编辑器可能会这样帮助你:
- PyCharm 中:
你将能进行代码补全,这是在之前你可能曾认为不可能的事。例如,在来自请求 JSON 体(可能是嵌套的)中的键 price
。
不会再输错键名,来回翻看文档,或者来回滚动寻找你最后使用的 username
或者 user_name
。
简洁
任何类型都有合理的默认值,任何和地方都有可选配置。所有的参数被微调,来满足你的需求,定义成你需要的 API。
但是默认情况下,一切都能“顺利工作”。
验证
- 校验大部分(甚至所有?)的 Python 数据类型,包括:
- JSON 对象 (
dict
). - JSON 数组 (
list
) 定义成员类型。 - 字符串 (
str
) 字段, 定义最小或最大长度。 - 数字 (
int
,float
) 有最大值和最小值, 等等。
- JSON 对象 (
- 校验外来类型, 比如:
- URL.
- Email.
- UUID.
- ...及其他.
所有的校验都由完善且强大的 Pydantic 处理。
安全性及身份验证
集成了安全性和身份认证。杜绝数据库或者数据模型的渗透风险。
OpenAPI 中定义的安全模式,包括:
- HTTP 基本认证。
- OAuth2 (也使用 JWT tokens)。在 OAuth2 with JWT查看教程。
- API 密钥,在:
- 请求头。
- 查询参数。
- Cookies, 等等。
加上来自 Starlette(包括 session cookie)的所有安全特性。
所有的这些都是可复用的工具和组件,可以轻松与你的系统,数据仓库,关系型以及 NoSQL 数据库等等集成。
依赖注入
FastAPI 有一个使用非常简单,但是非常强大的依赖注入系统。
- 甚至依赖也可以有依赖,创建一个层级或者“图”依赖。
- 所有自动化处理都由框架完成。
- 所有的依赖关系都可以从请求中获取数据,并且增加了路径操作约束和自动文档生成。
- 即使在依赖项中被定义的路径操作 也会自动验证。
- 支持复杂的用户身份认证系统,数据库连接等等。
- 不依赖数据库,前端等。 但是和它们集成很简单。
无限制"插件"
或者说,导入并使用你需要的代码,而不需要它们。
任何集成都被设计得被易于使用(用依赖关系),你可以用和路径操作相同的结构和语法,在两行代码中为你的应用创建一个“插件”。
测试
- 100% 测试覆盖。
- 代码库100% 类型注释。
- 用于生产应用。
Starlette 特性
FastAPI 和 Starlette 完全兼容(并基于)。所以,你有的其他的 Starlette 代码也能正常工作。FastAPI
实际上是 Starlette
的一个子类。所以,如果你已经知道或者使用 Starlette,大部分的功能会以相同的方式工作。
通过 FastAPI 你可以获得所有 Starlette 的特性 ( FastAPI 就像加强版的 Starlette ):
- 令人惊叹的性能。它是 Python 可用的最快的框架之一,和 NodeJS 及 Go 相当。
- 支持 WebSocket 。
- 支持 GraphQL 。
- 后台任务处理。
- Startup 和 shutdown 事件。
- 测试客户端基于
requests
。 - CORS, GZip, 静态文件, 流响应。
- 支持 Session 和 Cookie 。
- 100% 测试覆盖率。
- 代码库 100% 类型注释。
在线FastAPI中文文档
对python感兴趣的小伙们,这有免费学习教程python基础入门15天,不长不短适合小白
下面这个教程是适合0基础的,liunx都是0基础讲的,很多不好理解的地方都用了各种形象的例子。
Python教程_600集Python从入门到精通教程(懂中文就能学会)_哔哩哔哩_bilibili黑马程序员Python教程_600集Python从入门到精通教程(懂中文就能学会)共计536条视频,包括:01-课程安排、02-励志公式和python体验、03-什么是操作系统、04-不同领域的主流操作系统-01-桌面操作系统、05-不同领域的主流操作系统-02-服务器操作系统、06-不同领域的主流操作系统-03-嵌入式操作系统、07-虚拟机简介、08-操作系统发展简史、09-Linux的内核版和发行版、10-Linux系统下的文件目录结构、11-Ubuntu系统目录结构演示和简介、12-Ubuntu图形界面基本使用、13-Linux命令-01-明确学习目标、14-Linux命令-02-放大缩小终端窗口字体、15-Linux命令-03-明确6个常见终端命令的操作效果、16-Linux命令-04-6个常见终端命令简单演练、17-Linux命令-05-终端命令格式、18-Linux命令-06-查阅终端命令帮助信息、19-文件和目录命令-01-明确命令分类和学习目标、20-文件和目录命令-02-分享自动补全和命令选择技巧、21-文件和目录命令-03-查看隐藏文件和返回上一级目录、22-文件和目录命令-04-ls的列表和文件大小选项、23-文件和目录命令-05-ls和通配符的联合使用、24-文件和目录命令-06-通配符的字符组、25-文件和目录命令-07-cd命令的常用参数、26-文件和目录命令-08-相对路径和绝对路径、27-文件和目录命令-09-touch和mkdir命令的扩展、28-文件和目录命令-10-rm命令的扩展、29-拷贝和移动命令-01-目标确定和图形界面演示、30-拷贝和移动命令-02-tree以树状图查看目录结构、31-拷贝和移动命令-03-cp命令复制文件、32-拷贝和移动命令-04-cp命令-i选项覆盖前提示、33-拷贝和移动命令-05-cp命令-r选项复制目录、34-拷贝和移动命令-06-mv命令移动文件或者目录、35-拷贝和移动命令-07-mv命令给文件或者目录重命名、36-文件内容命令-01-cat和more的基本使用和对比、37-文件内容命令-02-cat命令的-b和-n选项输出行号、38-文件内容命令-03-grep查找文件内容、39-文件内容命令-04-grep行首/行尾的模式查找、40-其他命令-01-echo和重定向、41-其他命令-02-管道的概念和基本使用、42-远程管理命令-01-关机和重启、43-远程管理命令-02-网卡和IP地址的概念、44-远程管理命令-03-ifconfig和ping作用的介绍、45-远程管理命令-04-ifconfig查询网卡信息、46-远程管理命令-05-ping测试网络连接、47-远程管理命令-06-SSH工作方式简介、48-远程管理命令-07-域名和端口号的概念、49-远程管理命令-08-ssh命令格式介绍和演练目标确定、50-远程管理命令-09-Mac电脑使用ssh连接ubuntu、51-远程管理命令-10-PuTTY的安装和exit退出登录、52-远程管理命令-11-XShell的安装-免费和设置语言、53-远程管理命令-12-scp作用以及命令格式、54-远程管理命令-13-scp在Mac终端中的演示、55-远程管理命令-14-FileZilla在Windows下文件传输、56-SSH高级-01-确定目标/认识.ssh目录、57-SSH高级-02-免密码登录设置步骤、58-SSH高级-03-免密码登录工作原理、59-SSH高级-04-配置远程计算机的别名、60-用户权限-01-学习目标、61-用户权限-02-用户/权限/组的基本概念、62-用户权限-03-ls -l输出信息介绍、63-用户权限-03-ls -l硬链接数含义的扩展、64-用户权限-04-chmod修改文件权限、65-用户权限-05-chmod修改目录权限、66-用户权限-06-超级用户介绍、67-组管理-01-添加组/删除组/确认组信息、68-组管理-02-群组演练目标确定、69-组管理-03-chgrp修改目录所属组的演练、70-用户管理-01-新建用户useradd和passwd、71-用户管理-02--m选项的作用以及删除用户userdel、72-用户管理-03-id查看UID和GID以及passwd文件介绍、73-用户管理-04-who和whoami、74-用户管理-05-usermod设置主组和附加组、75-用户管理-06-usermod指定用户登录shell、76-用户管理-07-which查看命令所在位置、77-用户管理-08-su切换用户、78-用户管理-09-权限命令介绍和chown/chgrp演练、79-用户管理-10-chmod的数字表示法介绍、80-用户管理-11-chmod演练-R递归修改目录权限、81-系统信息-01-学习目标、82-系统信息-02-date和cal查看系统时间、83-系统信息-03-df和du查看磁盘和目录空间占用、84-系统信息-04-进程概念介绍、85-系统信息-05-ps命令基本使用、86-系统信息-06-top命令基本使用、87-系统信息-07-kill命令基本使用、88-其他命令-01-学习目标以及find命令的基本使用、89-其他命令-02-文件软链接的概念介绍、90-其他命令-03-文件软链接的演练步骤确定、91-其他命令-04-文件软链接的演练实现、92-其他命令-05-文件硬链接演练、93-其他命令-06-文件软硬链接工作方式简介、94-打包压缩-01-tar包简介和命令格式介绍、95-打包压缩-02-打包和解包演练、96-打包压缩-03-gzip压缩和解压缩介绍和演练、97-打包压缩-04-bzip2压缩和解压缩介绍和演练、98-软件安装-01-apt简介及命令格式介绍、99-软件安装-02-apt软件安装演练、100-软件安装-03-设置软件源、001-Ptyhon简介-01-Python的起源、002-Ptyhon简介-02-编译型语言和解释型语言、003-Ptyhon简介-03-Python的设计目标、004-Ptyhon简介-04-Python的设计哲学、005-Ptyhon简介-05-为什么选择Python?、006-Ptyhon简介-06-Python的特点和面相对象基本概念、007-Ptyhon简介-07-Python的优缺点、008-第一个程序-01-目标确定、009-第一个程序-02-python程序的格式以及扩展名、010-第一个程序-03-Hello Python程序演练、011-第一个程序错误排查-01-程序开发中的错误及原因、012-第一个程序错误排查-02-手误错误、013-第一个程序错误排查-03-一行代码不要做多件事情、014-第一个程序错误排查-04-缩进错误、015-第一个程序错误排查-05-Python2默认不支持中文、016-Python2和Python3的介绍、017-执行Python的方式-01-解释器运行及其他几种解释器简介、018-执行Python的方式-02-官方解释器交互式运行程序、019-执行Python的方式-03-IPython、020-执行Python的方式-04-集成开发环境IDE简介、021-执行Python的方式-05-PyCharm简介、022-执行Python的方式-06-PyCharm快速体验、023-PyCharm初始设置-01-目标确定、024-PyCharm初始设置-02-恢复初始设置、025-PyCharm初始设置-03-第一次启动PyCharm、026-PyCharm初始设置-04-项目简介/明确目录的作用、027-PyCharm初始设置-05-打开认识Python项目、028-PyCharm初始设置-06-设置解释器版本、029-PyCharm初始设置-07-项目和文件名的命名规则、030-PyCharm初始设置-08-新建项目演练、031-PyCharm初始设置-09-设置编辑区域和控制台的字体显示、032-PyCharm初始设置-10-PyCharm专业版的安装和启动、033-PyCharm初始设置-11-设置PyCharm专业版的启动图标、034-PyCharm初始设置-12-程序安装过程及文件目录介绍、035-PyCharm初始设置-13-卸载之前版本的PyCharm、036-PyCharm初始设置-14-PyCharm教育版的安装和启动、037-PyCharm初始设置-15-确定课程演练的PyCharm版本、038-多文件项目演练、039-程序的注释-01-注释的作用、040-程序的注释-02-单行注释、041-程序的注释-03-解释器不会解释#右侧的内容、042-程序的注释-04-在代码末尾增加单行注释、043-程序的注释-05-多行注释、044-程序的注释-06-注释的使用以及代码规范文档、045-算数运算符、046-程序执行原理-01-明确目标、047-程序执行原理-02-计算机中的三大件、048-程序执行原理-03-计算机三大件特点的问答、049-程序执行原理-04-程序执行原理简介、050-程序执行原理-05-Python程序执行原理、051-程序执行原理-06-明确程序的作用、052-程序执行原理-07-明确变量负责保存数据、053-变量的使用-01-明确目标和变量定义、054-变量的使用-02-使用PyCharm定义QQ变量、055-变量的使用-03-超市买苹果、056-变量的使用-04-PyCharm单步执行查看变量值、057-变量的使用-05-超市买苹果变量的定义和使用、058-变量的类型-01-明确演练需求/项目文件准备、059-变量的类型-02-个人信息案例演练、060-变量的类型-03-[扩展]PyCharm的调试细节-调试之前先继续执行程序、061-变量的类型-04-Python中的变量类型、062-变量的类型-05-type函数查看变量类型、063-变量的类型-06-Python2.x区分int和long、064-变量间的计算-01-数字型变量可以直接计算、065-变量间的计算-02-拼接字符串的两种方式、066-变量的输入输出-01-输入和函数的概念、067-变量的输入输出-02-input函数的基本使用、068-变量的输入输出-03-类型转换函数介绍、069-变量的输入输出-04-买苹果增强版演练、070-变量的输入输出-05-提出问题—从控制台输入数字需要两个变量处理、071-变量的输入输出-06-单步执行确认变量数量、072-变量的输入输出-07-买苹果案例改进、073-变量的输入输出-08-格式化输出语法介绍、074-变量的输入输出-09-格式化输出字符串变量、075-变量的输入输出-10-格式化输出整数变量、076-变量的输入输出-11-格式化输出浮点型变量、077-变量的输入输出-12-格式化输出%及小结、077-变量的输入输出-12-格式化输出及小结、078-变量的命名-01-标识符的概念及命名要求、079-变量的命名-02-关键字的概念和查看关键字列表、080-变量的命名-03-Python中的变量命名规则、081-判断语句-01-判断在生活中的应用场景、082-if基础-01-if语句基本语法介绍、083-if基础-02-判断年龄演练、084-if基础-03-比较运算符简介、085-if基础-04-if语句和缩进部分是一个完整的代码块、086-if基础-05-PyCharm代码块及光标位置提示、087-if基础-06-else的语法格式、088-if基础-07-判断年龄改进版、089-if基础-08-由控制台输入年龄-不同类型不能直接比较、090-if基础-09-if else可以看成一个完整的代码块、091-逻辑运算-01-逻辑运算符简介、092-逻辑运算-02-案例1判断年龄、093-逻辑运算-03-案例2考试成绩、094-逻辑运算-04-案例3非公勿入、095-elif-01-语法介绍及应用场景、096-elif-02-女友的节日案例、097-if嵌套-01-if嵌套的应用场景、098-if嵌套-02-if嵌套的语法、099-if嵌套-03-火车站安检-检查车票、100-if嵌套-04-[扩展]PyCharm使用Tab统一增加缩进、101-if嵌套-05-火车站安检-检查刀的长度、102-石头剪刀布-01-明确目标和需求、103-石头剪刀布-02-玩家和电脑出拳、104-石头剪刀布-03-判断胜负、105-石头剪刀布-04-[扩展]增加换行调整条件判断代码格式、106-石头剪刀布-05-随机数的使用、107-石头剪刀布-06-电脑随机出拳、108-循环-01-目标确定、109-循环-02-三大流程介绍、110-循环基础-01-基础语法介绍和常用的应用场景、111-循环基础-02-第一个while循环、112-循环基础-03-单步调试while循环、113-循环基础-04-死循环的概念及解决方法、114-循环基础-05-Python中的赋值运算符、115-循环基础-06-程序计数从0开始、116-循环计算-01-思路分析、117-循环计算-02-0到100数字累加、118-循环计算-03-偶数求和-准备偶数、119-循环计算-04-偶数求和-计算结果、120-break和continue-01-break关键字的应用场景、121-break和continue-02-break代码演练、122-break和continue-03-continue关键字的应用场景、123-break和continue-04-continue代码演练、124-循环嵌套-01-基本语法、125-循环嵌套-02-使用字符串运算直接输出小星星、126-循环嵌套-03-[扩展]print函数的结尾处理、127-循环嵌套小星星-01-输出行并且确定思路、128-循环嵌套小星星-02-嵌套循环完成案例、129-九九乘法表-01-明确思路和步骤、130-九九乘法表-02-打印9行小星星、131-九九乘法表-03-九九乘法表数据输出、132-九九乘法表-04-使用转义字符调整格式、133-函数-01-明确学习目标、134-函数-02-函数的概念以及作用、135-函数-03-函数的快速体验、136-函数基本使用-01-函数定义语法、137-函数基本使用-02-第一个函数演练、138-函数基本使用-03-函数的定义以及调用执行线路图、139-函数基本使用-04-应该先定义函数再调用函数、140-函数基本使用-05-[扩展]单步越过和单步进入、141-函数基本使用-06-函数的文档注释、142-函数参数-01-没有参数的函数过于死板、143-函数参数-02-函数参数的使用以及作用、144-函数参数-03-形参和实参、145-函数的返回值-01-返回值的应用场景和格式、146-函数的返回值-02-改造求和函数、147-函数的返回值-03-retrun关键字的注意事项、148-函数的嵌套调用-01-函数嵌套调用的执行线路图、149-函数的嵌套调用-02-[扩展]用百度网站举例说明函数的调用线路、150-分隔线演练-01-利用参数增加分隔线的灵活度、151-分隔线演练-02-打印多条分隔线、152-分隔线演练-03-增加多行分隔线函数的参数、153-分隔线演练-04-[扩展]PyCharm给函数增加文档注释、154-模块-01-概念介绍、155-模块-02-使用模块演练、156-模块-03-模块名也是一个标识符、157-模块-04-[科普]pyc文件可以提高程序执行速度、158-高级变量-01-学习目标确定、159-列表-01-作用和定义方式、160-列表-02-存储数据的方式以及从列表中取值、161-列表-03-确认列表常用操作的方法、162-列表-04-从列表中取值和取索引、163-列表-05-修改指定位置的数据、164-列表-06-向列表增加数据、165-列表-07-从列表删除数据、166-列表-08-使用del关键字从列表删除数据、167-列表-09-列表统计及删除方法扩展、168-列表-10-列表的排序和反转、169-列表-11-关键字、函数和方法的特点和区别、170-列表-12-迭代遍历、171-列表-13-列表的应用场景、172-元组-01-特点以及和列表的区别、173-元组-02-元组变量的定义、174-元组-03-元组变量的常用操作、175-元组-04-元组变量的循环遍历、176-元组-05-元组的应用场景、177-元组-06-元组和格式化字符串、178-元组-07-元组和列表之间的转换、179-字典-01-字典的定义格式以及键值对的概念、180-字典-02-变量的定义以及应用场景、181-字典-03-字典的增删改查常用操作、182-字典-04-字典的统计、合并、清空操作、183-字典-05-字典的循环遍历、184-字典-06-字典和列表组合的应用场景、185-字符串-01-定义和基本使用、186-字符串-02-长度、计数、位置方法演练、187-字符串-03-常用方法总览和分类、188-字符串-04-判断空白字符以及学习方法分享、189-字符串-05-判断数字的三个方法、190-字符串-06-字符串的查找和替换、191-字符串-07-文本对齐方法演练、192-字符串-08-去除空白字符、193-字符串-09-拆分和拼接字符串、194-字符串-10-切片概念和语法以及倒序索引、195-字符串-11-字符串切片演练、196-公共方法-01-内置函数长度、删除、最大、最小、比较、197-公共方法-02-切片、198-公共方法-03-算数运算符及对比列表追加方法、199-公共方法-04-成员运算符、200-公共方法-05-完整的for循环-for else、201-公共方法-06-利用for else搜索字典列表-for else、202-名片管理-01-明确目标及备课代码演示、203-框架搭建-01-框架介绍及系统架构分析、204-框架搭建-02-新建项目准备文件、205-框架搭建-03-用户输入判断和pass关键字、206-框架搭建-04-无限循环保证用户能够重复选择操作、207-框架搭建-05-if嵌套判断用户的具体操作预留代码位置、208-框架搭建-06-cards_main知识点小结、209-框架搭建-07-[扩展]TODO注释及格式、210-框架搭建-08-显示欢迎界面及功能菜单、211-框架搭建-09-准备名片操作函数修改主文件中函数调用、212-数据结构确定-01-确定名片管理系统的数据结构、213-新增名片-01-新增名片功能实现、214-新增名片-02-[扩展]PyCharm技巧重命名变量名、215-显示全部-01-遍历列表显示字典明细、216-显示全部-02-判断列表数量,没有名片直接返回、217-查询名片-01-查询功能实现、218-查询名片-02-准备处理名片函数、219-处理名片-01-增加分支判断用户操作类型、220-处理名片-02-删除名片、221-处理名片-03-修改名片、222-处理名片-04-明确细化修改名片的思路,准备新的输入函数、223-处理名片-05-实现修改名片输入函数、224-处理名片-06-增加文档注释、删除TODO标记、225-运行程序-01-增加Shebang符号直接运行Python程序、226-变量的引用-01-变量的引用概念、227-变量的引用-02-调用函数传递实参的引用、228-变量的引用-03-函数返回值传递引用、229-可变类型和不可变类型-01-基本概念、230-可变类型和不可变类型-02-列表、字典的修改和赋值、231-可变类型和不可变类型-03-字典的key不能是可变类型、232-局部变量和全局变量-01-基本概念和区别、233-局部变量-01-代码演练、234-局部变量-02-变量的生命周期、235-局部变量-03-不同函数内的同名局部变量、236-全局变量-01-基本代码演练、237-全局变量-02-[扩展]PyCharm的单步跟踪技巧、238-全局变量-03-函数内部不允许修改局部变量的值、239-全局变量-04-单步调试确认局部变量的定义、240-全局变量-05-global关键字修改全局变量、241-全局变量-06-全局变量定义的位置及代码结构、242-全局变量-07-全局变量命名的建议、243-函数参数和返回值的作用、244-函数的返回值-01-利用元组返回多个值、245-函数的返回值-02-接收返回元组函数的方式、246-函数的返回值-03-交换两个变量的值、247-函数的参数-01-在函数内部针对参数赋值不会影响外部实参、248-函数的参数-02-在函数内部使用方法修改可变参数会影响外部实参、249-函数的参数-04-列表使用+=本质上是调用extend方法、250-缺省参数-01-回顾列表的排序方法明确缺省参数的概念及作用、251-缺省参数-02-指定函数缺省参数的默认值、252-缺省参数-03-缺省参数的注意事项、253-多值参数-01-定义及作用、254-多值参数-02-数字累加案例演练、255-多值参数-03-元组和字典的拆包、256-递归-01-递归的特点及基本代码演练、257-递归-02-递归演练代码的执行流程图、258-递归-03-递归实现数字累加、259-递归-04-数字累加的执行流程图、001-面向对象-01-基本概念、002-面向对象-02-类和对象基本概念、003-面向对象-03-设计类的三要素和名词提炼法、004-面向对象-04-内置的dir函数查询对象的方法列表、005-定义简单类-01-基本语法、006-定义简单类-02-案例演练、007-定义简单类-03-接收对象的变量同样是对对象的引用、008-定义简单类-04-创建多个猫对象、009-self-01-在类的外部给对象增加属性、010-self-02-利用self在类封装的方法中输出对象属性、011-初始化方法-01-在类的外部给对象增加属性的隐患、012-初始化方法-02-创建对象时自动调用初始化方法、013-初始化方法-03-在初始化方法中定义属性、014-初始化方法-04-使用参数设置属性初始值、015-内置方法-01-del方法和对象的生命周期、016-内置方法-02-str方法定制变量输出信息、017-小明爱跑步-01-封装特性和需求分析、018-小明爱跑步-02-案例完成、019-小明爱跑步-03-扩展-多个对象属性之间互不干扰、020-摆放家具-01-需求分析-被使用的类应该先开发、021-摆放家具-02-家具类以及创建家具对象、022-摆放家具-03-定义房子类、023-摆放家具-04-完成添加家具方法、024-封装案例-01-需求分析-属性可以是另外一个类创建的对象、025-封装案例-02-创建(qiang)类、026-封装案例-03-创建士兵类-完成初始化方法、027-封装案例-04-完成开火方法、028-封装案例-05-身份运算符-判断None应该使用 is、029-私有属性和方法-01-应用场景、定义方式和演练、030-私有属性和方法-02-伪私有属性和方法、031-单继承-01-问题的抛出-单纯封装可能会出现重复的代码、032-单继承-02-继承的概念和语法、033-单继承-03-继承相关的术语-继承和派生、034-单继承-04-继承的传递性、035-单继承-05-继承传递性的注意事项、036-方法的重写-01-覆盖父类方法,重写子类方法实现、037-方法的重写-02-扩展父类方法,super对象调用父类方法、038-方法的重写-03-使用父类名调用父类方法、039-私有属性和方法-01-子类对象不能直接访问、040-私有属性和方法-02-通过父类方法间接访问、041-多继承-01-概念、语法和基本演练、042-多继承-02-注意父类之间注意不要有重名方法或属性、043-多继承-03-MRO方法搜索顺序、044-多继承-04-新式类和经典类、045-多态-01-基本概念、046-多态-02-案例演练、047-类属性-01-创建对象的过程以及实例的概念、048-类属性-02-类是一个特殊的对象、049-类属性-03-类属性的定义及使用、050-类属性-04-属性查找机制-向上查找、051-类属性-05-使用对象名+类属性赋值语句会创建实例属性、052-类方法-01-基本语法、053-类方法-02-案例演练、054-静态方法-01-应用场景和定义方式、055-方法综合-01-案例分析、056-方法综合-02-案例演练、057-方法综合-03-确定方法类型的套路、058-单例-01-设计模式和单例设计模式概念、059-单例-02-new方法的作用、060-单例-03-重写new方法、061-单例-04-单例设计模式思路分析、062-单例-05-单例设计模式代码实现、063-单例-06-初始化动作只执行一次、064-异常-01-异常的概念以及抛出异常的原因、065-异常-02-简单的异常捕获、066-异常-03-根据错误类型捕获异常、067-异常-04-捕获未知错误、068-异常-05-异常捕获的完整语法、069-异常-06-异常的传递性、070-异常-07-主动抛出异常的应用场景、071-异常-08-主动抛出异常案例演练、072-模块-01-基本概念和import导入复习、073-模块-02-import导入时指定别名、074-模块-03-from import局部导入、075-模块-04-from import导入同名工具、076-模块-05-from import导入所有工具、077-模块-06-模块搜索顺序、078-模块-07-开发原则以及导入文件时会执行没有缩进的代码、079-模块-08-__name__属性兼顾测试和导入两种模式、080-包-01-包的概念以及建立包的方式、081-包-02-封装模块、设置__init__和外界导入包、082-制作模块-01-明确目的和介绍步骤、083-制作模块-02-制作模块压缩包、084-制作模块-03-安装模块压缩包、085-制作模块-04-卸载已经安装过的模块、086-pip-使用pip安装pygame模块、087-文件-文件概念以及文本文件和二进制文件的区别、088-文件操作-01-文件操作套路以及Python中的对应函数和方法、089-文件操作-02-读取文件内容、090-文件操作-03-读取文件后文件指针会发生变化、091-文件操作-04-打开文件方式以及写入和追加数据、092-文件操作-05-使用readline分行读取大文件、093-文件操作-06-小文件复制、094-文件操作-07-大文件复制、095-导入os模块,执行文件和目录管理操作、096-文本编码-01-文本文件的编码方式ASCII和UTF8、097-文本编码-02-怎么样在Python2.x中使用中文、098-文本编码-03-Python2.x处理中文字符串、099-eval-01-基本使用、100-eval-02-[扩展]不要直接转换input结果、001-项目实战-01-明确目标和实战步骤、002-项目实战-02-确认pygame模块正确安装、003-快速体验-01-项目准备及游戏的第一印象、004-游戏窗口-01-游戏的初始化和退出、005-游戏窗口-02-pygame的坐标系、006-游戏窗口-03-pygame.Rect描述矩形区域、007-游戏窗口-04-创建游戏窗口和游戏循环、008-绘制图像-01-绘制图像的三个步骤、009-绘制图像-02-绘制英雄和透明图像、010-绘制图像-03-update方法的作用、011-介绍计算机中的动画实现原理、012-游戏循环-01-基本概念明确下一步目标、013-游戏循环-02-利用时钟设置游戏循环的刷新帧率、014-游戏循环-03-英雄动画效果实现、015-游戏循环-04-英雄循环飞行以及作业、016-事件监听-01-基本概念和event模块的get方法、017-事件监听-02-监听退出事件并且退出游戏、018-精灵和精灵组-01-基本概念、019-精灵和精灵组-02-自定义精灵子类需求分析、020-精灵和精灵组-03-派生精灵子类代码实现、021-精灵和精灵组-04-创建敌机并且实现敌机动画、022-框架搭建-01-明确飞机游戏类的设计、023-框架搭建-02-明确文件职责准备主游戏类、024-框架搭建-03-游戏初始化、025-框架搭建-04-使用常量定义游戏窗口大小、026-框架搭建-05-搭建启动游戏方法结构、027-背景图像-01-交替滚动实现思路分析、028-背景图像-02-背景类的设计与基本实现、029-背景图像-03-背景图像的交替滚动实现、030-背景图像-04-利用初始化方法简化背景精灵的创建、031-敌机-01-定时器语法介绍、032-敌机-02-定义并且监听创建敌机的定时器事件、033-敌机-03-设计并准备敌机类、034-敌机-04-定时创建并显示敌机精灵、035-敌机-05-随机位置以及随机速度、036-敌机-06-销毁飞出屏幕的敌机、037-英雄-01-需求分析和类设计、038-英雄-02-准备英雄类、039-英雄-03-绘制英雄、040-英雄-04-两种按键方式对比、041-英雄-05-控制英雄左右移动、042-英雄-06-英雄边界控制、043-发射子弹-01-添加并监听英雄发射子弹事件、044-发射子弹-02-定义子弹类、045-发射子弹-03-发射子弹、046-发射子弹-04-一次发射三枚子弹、047-碰撞检测-01-子弹摧毁敌机、048-碰撞检测-02-敌机撞毁英雄、001-vi简介-01-学习vi的目的、002-vi简介-02-vi和vim以及vi的特点、003-004-打开文件-打开或者新建文件,并且定义指定行、005-打开文件-03-删除交换文件、006-工作模式-01-职责以及切换方式、007-工作模式-02-工作模式切换演练、008-vi命令-01-学习线路图、009-010-移动命令(01方向和行内移动-02行数跳转和上下翻页)、011-移动命令-03-段落切换和括号切换、012-移动命令-04-利用标记返回之前需要编辑的代码位置、013-选中命令-01-三种选择文本的方式、014-撤销和删除-01-撤销和恢复命令介绍、015-撤销和删除-02-删除命令演练、016-撤销和删除-03-撤销和恢复撤销、017-复制和粘贴-01-复制和粘贴演练、018-复制和粘贴-02-系统剪切板的内容不能使用p粘贴、019-替换命令、020-缩排以及重复执行、021-查找字符串或者单词、022-查找并替换-01-全局替换、023-查找并替换-02-替换可视区域、024-查找并替换-03-确认替换、025-进入编辑模式的6个命令、026-编辑命令演练-01-和数字的连用、027-编辑命令演练-02-利用可视块给多行代码增加注释、028-分屏命令-01-末行命令扩展、029-分屏命令-02-w命令阶段性备份代码、030-分屏命令-03-分屏命令演练等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV1ex411x7Em?spm_id_from=333.999.0.0
总的来说这个教程,很适合刚入门没有什么基础的伙伴学,有其他语言基础的伙伴可以两倍速快速刷,效率很高,时间上可以这样分配,用15天去学
- 1-3 天内容为Linux基础命令
- 4-13 天内容为Python基础教程
- 14-15 天内容为 飞机大战项目演练
入门后还想多学,这些Python好课可以继续:
- python大数据方向
2022最新大数据Hadoop入门视频教程,最适合零基础自学的大数据Hadoop教程
2022年大数据spark3.2入门Spark全套视频教程,4天spark3.2快速入门到精通,全网首套基于Python语言的spark教程
2022年mysql基础入门2022最新MySQL知识精讲+mysql实战案例_零基础mysql数据库入门到高级全套教程
Python+大数据开发
MySQL数据库:2022最新MySQL知识精讲+mysql实战案例_零基础mysql数据库入门到高级全套教程
Hadoop入门:2022最新大数据Hadoop入门视频教程,最适合零基础自学的大数据Hadoop教程
Hive数仓项目:大数据项目实战教程_大数据企业级离线数据仓库,在线教育项目实战(Hive数仓项目完整流程)
PB内存计算
Python入门:全套Python教程_Python基础入门视频教程,零基础小白自学Python必备教程
Python编程进阶:Python高级语法进阶教程_python多任务及网络编程,从零搭建网站全套教程
spark3.2从基础到精通:Spark全套视频教程,4天spark3.2快速入门到精通,全网首套基于Python语言的spark教程
Hive+Spark离线数仓工业项目实战:全网首次披露大数据Spark离线数仓工业项目实战,Hive+Spark构建企业级大数据平台
趁着年轻,不怕多吃一些苦。这些逆境与磨练,才会让你真正学会谦恭。不然,你那自以为是的聪明和藐视一切的优越感,迟早会毁了你。
以上是关于如何评价最近爆红的FastAPI?的主要内容,如果未能解决你的问题,请参考以下文章