前言
安装
由于篇幅有限, 请参考网络上的教程 (python推荐使用anaconda)
代码仓库
如何运行
以打印hello world为例
1 | # main.py文件 |
1 | python main.py |
变量定义和数据类型
变量是一个指向内存中某个地址的标识符, 一般用来存放数据.
数据类型就是表示某个变量的类型, 类型决定这个变量在内存中所占的空间大小.
赋值就是将数据(值)存放到变量所指向的地址中, 后续就可以用这个变量来获取该数据
1 | # 示例: 定义不同类型的变量 |
数组array/列表list/字典dict|map/集合set/
1 | # 定义一个列表 |
流程控制
流程控制就是定义我们程序的执行顺序
顺序
顺序执行就从上到下依次执行, 这个是我们程序的正常执行流程
选择
选择就是根据满足不同的条件来执行不同的代码
选择的流程分为单分支和多分支
单分支
单分支指的是只有一个分支节点, 只有一次条件判断
1 | # 示例: 单分支 if 语句 |
多分支
多分支则是有多个分支节点, 多个条件判断 (if-elif-else | switch-case)
1 | # 示例: 多分支 if-elif-else 语句 |
循环
循环表示一个重复执行的过程
1 | # 示例: for 循环遍历列表 |
函数
函数的本质是一个闭包, 有自己的作用域
我们可以用函数定义一段代码, 接收0或多个输入, 执行函数体内的代码, 在结束时返回0或多个输出
使用函数可以提取公共逻辑, 简化我们的代码
1 | # 示例: 定义一个函数并调用 |
类/结构体
类/结构体
类是一个包含了数据和方法(函数)的抽象结构, 我们可以定义它, 要使用类, 需要将类实例化, 其实就是在内存中开辟指定大小的空间来保存它
类的大小取决于内部定义什么数据(比如int), 编译器会自动根据数据大小来决定分配多少空间
一个类可以有多个实例化对象, 也就是有多个不同变量, 但是这些变量都和这个类的结构一致
1 | # 示例: 定义一个类并创建实例 |
接口
接口(Interface)语法是一种定义行为规范的方式。它描述了某个类型应该具备哪些方法(函数),但不关心这些方法具体怎么实现。
接口是一种 抽象的契约(contract):
- 它只定义方法名、参数和返回值。
- 不包含任何具体实现(逻辑代码)。
- 一个类型只要实现了接口中定义的所有方法,就被称为“实现了该接口”。
1 | # 示例: 使用 abc 模块模拟接口 |
框架
为了简化开发, 程序员会提取公共逻辑, 封装成函数, 或者封装成类和方法, 简化开发, 在这个不断简化的过程中就诞生了框架
不过以我的理解, 库(library)是提取公共方法和类的工具集合, 用户可以以自己的喜好添加很多不同的库来使用; 而框架(framework)
更像是定义了一套项目规范和模板,然后用户在框架的基础上遵守框架约定的标准或结构进行开发; 不过很多时候这个界限不是很清晰,
两个词经常混用
web
我们目前写的程序都是在本地运行的, 为了让世界各地的用户也能使用, 就需要开放到网络, 而web框架, 就是封装了语言本身提供的网络库,
然后提供了开放网络服务的各种方法
python语言常用的web框架为flask|fastapi|django, 我们这里用fastapi举例
1 | pip install fastapi uvicorn -i https://pypi.tuna.tsinghua.edu.cn/simple |
1 | from fastapi import FastAPI |
访问localhost:8080查看
Swagger UI:http://127.0.0.1:8000/docs
ReDoc:http://127.0.0.1:8000/redoc
db
我们目前都是使用变量来存储数据, 但是变量的数据是放在内存中的, 一旦程序停止, 内存中的数据就会被回收, 下一次启动程序,
操作系统分配的也可能是另一个内存空间, 所以我们需要持久化存储我们的数据, 这就需要用到数据库系统
我们这里以sqlalchemy为例
1 | pip install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple |
1 | from sqlalchemy import create_engine, Column, Integer, String |
扩展
- AI方向:
- 数据分析|机器学习|深度学习|强化学习
- numpy(运算)|pandas(数据加载和处理)|matplotlib(可视化)
- scikit-learn(机器学习)|tensorflow|pytorch(深度学习)
- 实现各种机器学习模型|深度学习神经网络
- langchain|llama-index 大模型应用
- 多线程/微服务/反射-动态代理/文件操作/网络编程/
- 框架的原理/手写
- wasm/grpc
社群
你可以在这些平台联系我:
- bili: 刚子哥forever
- 企鹅群: 940263820
- gitee: gitee
- 博客: malcode-site
- 邮箱: malguy2022@163.com
- 知乎: 乐妙善哉居士
- csdn: 飞鸟malred