当前位置: 首页 > news >正文

后端(fastAPI)学习笔记(CLASS 1):扩展基础

一、python的类型声明

1、类型声明的背景和作用

python 3.6+ 版本引入了“类型提示”

1、类型提示是一种新的语法,用来声明变量的类型

2、提高编译器和工具的支持能力

为什么要学习类型提示

1、了解类型提示不仅仅对使用FastAPI有帮助,也能提高代码的可读性度和可靠性有很大的帮助

类型提示的好处

1、不改变原始运行结果

2、提供更好的编译器支持和代码补全

编译器支持

1、通过类型提示,编译器可以帮助检查代码中的错误

2、例如,将int类型的age转换为str类型

以下是类型声明语法的示例代码:

# python中类型声明# 变量类型的声明
a: int = 20
b: str = '11,22'
c: list = [11, 22]
print(a)# 函数的参数和返回值的类型声明
def work(a: int, b: int) -> int:return a+b# 若不是int类型则会报错
print(work(1, 1))
2、使用场景案例

1、变量的类型声明

name: str = '张三'
age: int = 18

2、函数参数的类型声明

def work(a: int, b: int):return a+b

3、函数返回值的类型声明

def work2(name: str, age: int) -> dict:return { "名字": name, "年龄": int }def work3(datas: list) -> dict:return dict(enumerate(datas))
3、复合类型的类型声明

上面的案例只对datas这个参数做了类型声明,对于datas中的数据并没有进行任何声明,那么这种复合类型的数据类型如何进行声明呢?需要使用typing标准库声明容器数据结构的类型和子类型

# 比如 我希望datas是列表嵌套字典的数据格式:[{"name":"张三"}, {"age": 18}, {"addr":"地址"}]from typing import List, Uniondef work4(datas: List[dict]) -> dict:print(datas)return {"data": datas}work4([{"name":"张三"}, {"age": 18}])def work5(datas: List[Union[str, int]]) -> dict:print(datas)return {"data": datas}work5(['名字', 18])
4、使用自定义类型声明
class Person:def __init__(self, name: str, age: int):self.name = nameself.age = agedef get_person_info(p: Person) -> dict:return {"名字": p.name, "年龄": p.age}p = Person("张三", 18)
print(get_person_info(p))

二、Pydantic模型

1、使用方法
# fastapi关于类型校验的参数模块pydantic----中的pydantic-core专门负责校验类型
# pip install fastapifrom pydantic import BaseModel, ValidationError class Student(BaseModel):name: strage: intsex: strdef work(stu: Student):print(stu.name)print(stu.age)print(stu.sex)if __name__ == '__main__':try:s = Student(name="张三", age=[18], sex="男")except ValidationError as e:print(e.json())

此时抛出的错误为:

PS D:\py> & c:/Users/judge/myenv/Scripts/python.exe d:/py/study-1.py
[{"type":"int_type","loc":["age"],"msg":"Input should be a valid integer","input":[18],"url":"https://errors.pydantic.dev/2.11/v/int_type"}]

2、pydantic模型对象的常用操作
# 1、转换为字典
print(p.dict())
# 2、获取部分字段
res = p.dict(include={'name', 'age'})
print(type(res), res)# 3、进行序列化---->json字符串
print(p.json())
# 4、进行反序列化---->对象 exclude
res2 = p.json(include={'name', 'age'})
print(type(res2), res2)


文章转载自:

http://7U6ovVcx.hqxyt.cn
http://3F6nUrAq.hqxyt.cn
http://VwhmVfPz.hqxyt.cn
http://ph5kP0DQ.hqxyt.cn
http://kTQ7P6WY.hqxyt.cn
http://SOaGN6ue.hqxyt.cn
http://ODGOX8bt.hqxyt.cn
http://G4OK5CWo.hqxyt.cn
http://qrtAM4JT.hqxyt.cn
http://ER9IdQ1L.hqxyt.cn
http://MoboWMyL.hqxyt.cn
http://mk3WRMna.hqxyt.cn
http://mAehKeR1.hqxyt.cn
http://9t9KjsnA.hqxyt.cn
http://WEkFL5vI.hqxyt.cn
http://cTuehXt4.hqxyt.cn
http://0LMyD9yE.hqxyt.cn
http://doVjTcp8.hqxyt.cn
http://Dgnm1tHd.hqxyt.cn
http://RkqAHZEX.hqxyt.cn
http://YDeRgjEt.hqxyt.cn
http://jeZy6cso.hqxyt.cn
http://ALRcqzrs.hqxyt.cn
http://vSxxq1Z6.hqxyt.cn
http://qpnurAdu.hqxyt.cn
http://xj286YrI.hqxyt.cn
http://fqhpxryu.hqxyt.cn
http://hxc3hd0R.hqxyt.cn
http://cOdS6nNF.hqxyt.cn
http://XQSM8VgC.hqxyt.cn
http://www.dtcms.com/a/371590.html

相关文章:

  • Spring Boot @RestController 注解详解
  • 腾讯云语音接口实现会议系统
  • ESP32与SUI-101A实现用电器识别
  • Wan2.2-S2V - 音频驱动图像生成电影级质量的数字人视频 ComfyUI工作流 支持50系显卡 一键整合包下载
  • 开始 ComfyUI 的 AI 绘图之旅-图生图(二)
  • VS2017安装Qt插件
  • ZYNQ FLASH读写
  • 容器元素的滚动条回到顶部
  • 【音频字幕】构建一个离线视频字幕生成系统:使用 WhisperX 和 Faster-Whisper 的 Python 实现
  • ncnn-Android-mediapipe_hand 踩坑部署实录
  • java面试中经常会问到的mysql问题有哪些(基础版)
  • SoundSource for Mac 音频控制工具
  • Unity学习----【进阶】Input System学习(一)--导入与基础的设备调用API
  • 第11篇:降维算法:PCA、t-SNE、UMAP
  • 【Leetcode100】算法模板之二叉树
  • 深入理解假设检验:从抛硬币到药物实验的全景讲解
  • JavaScript笔记之JS 和 HTML5 的关系
  • 第4篇 conda install pytorch==2.0.0报错
  • 基于Echarts+HTML5可视化数据大屏展示-学生综合成绩评价系统大屏
  • 探索OpenResty:高性能Web开发利器
  • Lua 核心知识点详解
  • 26考研——内存管理_内存管理策略(3)
  • MySQL索引和B+Tree的关系
  • 《云原生配置危机:从服务瘫痪到韧性重建的实战全解》
  • 论文阅读-SelectiveStereo
  • 架构思维:重温限流算法原理与实战
  • 【面试题】关于RAG的五道题
  • redis的数据类型:List
  • 【mysql】SQL自连接:什么时候需要,什么时候不需要?
  • Android网络之WIFI技术网络模型概述