一、安装python版本控制工具
1、下载pyenvwin-win安装包
https://github.com/pyenv-win/pyenv-win.git
或者直接下载工具包https://download.csdn.net/download/qq_42717015/93843066
下载后解压到本地然后拷贝pyenv-win

2、安装
cmd => powershell(最好是管理员运行)
cd E:
cd .\pyenv-win
这条命令的作用是修改当前 Windows 用户的 PowerShell 脚本执行策略,允许运行本地编写的或下载的未签名脚本(但来自互联网的脚本仍需签名)。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
./install-pyenv-win.ps1
(这条命令的作用是临时刷新当前终端窗口的环境变量,让它在不重启电脑的情况下,立刻识别到你刚刚新添加的路径)
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
3、配置环境变量
新增系统变量
PYENV
E:\pyenv-win
修改Path 新增
%PYENV%\bin
%PYENV%\shims

4、常用命令
# 查看所有可安装的 python 版本
pyenv install -l
# 安装指定版本的 python
pyenv install 3.5.2
# 一个命令中安装多个版本
pyenv install 2.4.3 3.6.8
# 卸载 指定 版本 的 python
pyenv uninstall 3.5.2
# 查看已安装的版本
pyenv versions
# 查看当前使用版本
pyenv version
5、设置全局的 python 版本;设置指定文件夹下的 python 版本
# 设置 全局的 python 版本
pyenv global 3.5.2
# 设置指定文件夹下的 python 版本;在指定 文件夹下执行该命令,文件夹下会生成一个配置文件(不能删除)
pyenv local 3.5.2
查看python版本
python -V
二、python基础学习
2.1变量与基本数据类型
name = "小明"
age = 18
height = 1.75
is_student = True
score = None
print(f"我叫{name},今年{age}岁,身高{height},我{'是' if is_student else '不是'}一名学生")
age,height,is_student = 33,1.95,False
print(f"我叫{name},今年{age}岁,身高{height},我{'是' if is_student else '不是'}一名学生")
student = {
"name": "小李",
"age": 19,
"height": 1.86,
"is_student": True,
"score": None
}
print(f"我叫{student['name']},今年{student['age']}岁,身高{student['height']},我{'是' if student['is_student'] else '不是'}一名学生")
# 测试数据类型
print(f"姓名是{type(student['name'])}")
# 计算
print(f"小明比小李大{ age - student['age'] }岁") #因为从新赋值了所以小明是33岁
beishu = age / student['age']
print(f"小明是小李的{beishu}倍")
# 取整
beishu1 = age // student['age']
print(f"小明是小李的{beishu1}倍")
# 取余
beishu2 = age % student['age']
print(f"小明是小李的{beishu2}倍")
# 取两位小数
beishu3 = round(age / student['age'],2)
print(f"小明是小李的{beishu3}倍")
练习
# 把 " I LOVE PYTHON " 清洗成 "i love python"。
# 给定邮箱 "user@example.com",分别取出用户名和域名。
# 把句子 "the quick brown fox" 每个单词首字母大写(提示:用 split + 循环 + capitalize,或用 title())。
# 统计字符串 "banana" 中字母 a 出现的次数。
# 用 f-string 输出:姓名: 张三, 年龄: 25, 薪资: 12345.68,薪资保留两位小数。
print("I LOVE PYTHON ".strip().lower())
print("user@example.com".split("@"))
print("the quick brown fox".title())
print("banana".count("a"))
name,age,salary = "张三" , 25 , 12345.68555
print(f"姓名: {name}, 年龄: {age}, 薪资: {round(salary,2)}")
2.2、变量与基本数据类型 list、dict、tuple、set。Agent 开发里列表和字典是绝对核心,
2.2.1、list学习
list = [1,2,7,9,12]
list.append(100) # 追加元素
list.insert(2,3) # 指定位置插入元素 [1, 2, 3, 7, 9, 12, 100]
list.remove(9) # 按值删除 [1, 2, 3, 7, 12, 100]
print(list)
print(list[1:3]) # [2, 3]
# 遍历列表中的每个元素
# for i in list:
# print(i)
# 练习
# 创建列表 [10, 20, 30, 40, 50],分别打印第一个、最后一个、中间三个元素。
print(f"第一个元素是{[10, 20, 30, 40, 50][0]},最后一个元素{[10, 20, 30, 40, 50][-1]},第三个元素{list[2]}")
# 用列表推导式生成 1~20 中所有能被 3 整除的数。
print([i for i in range(1,21) if i % 3 == 0])
# 给定 words = ["Hello", "World", "Python"],用列表推导式全部转小写。
print([i.lower() for i in ["Hello", "World", "Python"]])
# 给定 nums = [5, 2, 9, 1, 7],求最大值、最小值、平均值(保留两位小数)。
print(f"最大值是{max([5, 2, 9, 1, 7])},最小值是{min([5, 2, 9, 1, 7])},平均值是{round(sum([5, 2, 9, 1, 7]) / len([5, 2, 9, 1, 7]),2)}")
# 合并两个列表 [1, 2] 和 [3, 4],去掉重复元素后排序。
print(sorted(set([1, 2] + [3, 4])))
# 给定嵌套列表 matrix = [[1, 2], [3, 4], [5, 6]],用列表推导式把它拍平成一维列表 [1, 2, 3, 4, 5, 6]。
matrix = [[1, 2], [3, 4], [5, 6]]
print([i for sub in matrix for i in sub])
2.2.2、字典 dict(对象的学习{})
user = {
"name": "张三",
"age": 25,
"height": 1.75,
"is_student": True,
"score": None,
"city": "北京"
}
user["email"] = "xm@example.com" # 添加字段
user["age"] = 19 # 修改字段
del user["city"] # 删除字段
print(user)
for key in user:
print(f"{key}:{user[key]}")
userfj ={
"yuwen": 90,
"math": 85,
"english": 88
}
print({**user,**userfj}) # 合并字典
# 练习
# 创建字典存一本书的信息:书名、作者、价格、是否在售,打印成 《书名》作者:xxx,价格:xx元。
book ={
"name": "Python从入门到实践",
"author": "张三",
"price": 99,
"is_in_stock": True
}
print(f"{book["name"]} 作者:{book["author"]},价格:{book["price"]}元")
# 给定 d = {"a": 1, "b": 2},用 get 安全访问不存在的键 "c",默认返回 0。
print({"a": 1, "b": 2}.get("c",0))
# 统计字符串 "hello world" 中每个字符出现的次数,存成字典(提示:count = {},遍历时用 count.get(ch, 0) + 1)。
hello = "hello world"
numdict ={}
for i in hello:
numdict[i] = numdict.get(i,0) + 1
print(i)
print(numdict)
# 给定嵌套结构 {"data": {"items": [{"id": 1}, {"id": 2}]}},取出所有 id 组成列表。
ids = {"data": {"items": [{"id": 1}, {"id": 2}]}}
print([i["id"] for i in ids["data"]["items"]])
# 用字典推导式生成 {1: "奇数", 2: "偶数", ...} 到 10。
print({i: "奇数" if i % 2 == 1 else "偶数" for i in range(1,11)})
# 遍历字典,只打印值大于 10 的键值对。
data = {"a": 5, "b": 15, "c": 20}
print({i:data for i,data in data.items() if data > 10})
2.2.3、元组 tuple
point = (3, 5)
x, y = point # 解包
print(point[0], len(point))
# 练习
# 定义 (姓名, 年龄, 城市) 元组,用解包分别打印三项。
name,age,city = ("张三","北京",18)
print(name,age,city)
# 写函数返回列表的 (最小值, 最大值, 平均值),调用处解包接收。
tuple = (8,12,6,5,7)
print(min(tuple),max(tuple),round(sum(tuple) / len(tuple),2))
2.2.4、集合 set
s = {1, 2, 3, 3, 2}
print(s) #{1, 2, 3}
a, b = {1, 2, 3}, {3, 4, 5}
print(a & b) # 交集 {3}
print(a | b) # 并集 {1,2,3,4,5}
print(a - b) # 差集 {1,2}
print(b - a ) # 差集 {1,2}
# 练习
# 用集合给列表 [1, 2, 2, 3, 4, 4, 5] 去重并转回列表。
print(list(set([1, 2, 2, 3, 4, 4, 5])))
# 给定两个列表,找出它们共同的元素。
a, b = [1, 2, 3], [2, 3, 4]
print(set(a)&set(b)) # {2,3}
print(list(set(a)&set(b))) # [2, 3]
# 判断两个列表是否有重复元素(提示:len(set(a)) < len(a))。
nums = [1, 2, 2, 3]
print(len(set(nums)) < len(nums))
2.3、控制流
2.3.1、if else
score = 85
if score >= 90: grade = "A"
elif score >= 80: grade = "B"
elif score >= 60: grade = "C"
else: grade = "D"
print(grade) # B
# 练习
# 输入一个整数,判断是正数、负数还是零。
count = 0
if count > 0: print("整数")
elif count < 0: print("负数")
else: print("零")
# 根据分数打印等级:90+ 为 A,80~89 为 B,60~79 为 c,60 以下为 D。
chengji = 80
if chengji >= 90: print("A")
elif chengji >= 80: print("B")
elif chengji >= 60: print("c")
else: print("D")
# 给定用户名和密码,判断是否登录成功(都匹配才成功,否则分别提示"用户名错误"或"密码错误")。
username,password = "admin","123456"
entuser, entpwd = "admin","123456"
if username != entuser: print("用户名错误")
elif password != entpwd: print("密码错误")
else: print("登录成功")
2.3.2、for循环
# 遍历 数组
for i in ["zhangsan","lisi","caixukun"]:
print(i)
# 遍历 对象
for k, v in {"name": "小明", "age": 18}.items():
print(k,v)
# 遍历 字符串
for k in "jsgdjsgdjdg":
print(k)
# 遍历 range
for i in range(5): # 0 1 2 3 4
print(i)
for i in range(2, 6): # 2 3 4 5
print(i)
for i in range(0, 10, 2): # 0 2 4 6 8,步长 2
print(i)
for i in range(5, 0, -1): # 5 4 3 2 1,倒序
print(i)
# 嵌套循环
for i in range(1, 4):
for j in range(1, 4):
print(i, j)
print("===============================================")
# 练习
# 打印 1~10 的所有偶数。
print([i for i in range(1, 11) if i % 2 == 0])
# 求 1~100 的累加和。
print(sum(range(1, 101)))
# 打印九九乘法表(嵌套循环)。
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\t")
print()
# 给定列表 ["a", "b33", "c"],打印每个元素及其长度。
print((i,len(i)) for i in ["a", "b33", "c"])
# 给定字典 {"apple": 3, "banana": 5},计算所有值的总和。
print(sum({"apple": 3, "banana": 5}.values()))
# 用 range 倒序打印 10~1。
print(list(range(10, 0, -1)))
2.3.3、while 循环
# 基本用法
i = 0
while i < 5:
print(i)
i += 1
# 条件驱动的循环(不知道要循环几次)
n = 27
steps = 0
while n != 1:
n = n // 2 if n % 2 == 0 else n * 3 + 1
steps += 1
print(steps)
# 用 while True + break 模拟"一直等到满足条件"
attempts = 0
while True:
attempts += 1
if attempts >= 3:
print("重试 3 次后放弃")
break
# 练习
# 用 while 打印 1~10。
i = 1
while i <= 10:
print(i)
i += 1
# 用 while 求 1~100 的和。
sum = 0
i = 1
while i <= 100:
sum += i
i += 1
print(sum)
# 模拟密码输入:最多允许 3 次尝试,成功则 break,3 次都失败打印"账号锁定"。
password = "123456"
tries = 0
while tries < 3:
pwd = input("请输入密码:")
if pwd == password:
print("登录成功")
break
tries += 1
else:
print("账号锁定")
2.3.4、break / continue / else
1、第一个网络请求项目的创建
python3 -m venv .venv 这条命令的作用是:在当前目录下创建一个名为 .venv 的 Python 虚拟环境(virtual environment)。
python3 -m venv .venv
创建完环境后,还需要"激活"它
激活后,终端提示符前通常会出现 (.venv),此时 python 和 pip 指向的都是这个虚拟环境里的版本,安装的包也只进这个环境。退出用 deactivate。
source .venv/bin/activate # Linux/macOS
.venv\Scripts\activate # Windows
安装fastapi
pip install "fastapi[standard]"
2、创建main.py文件
from fastapi import FastAPI
app = FastAPI(title="我的第一个 API")
@app.get("/")
def home():
return {"message": "Hello, FastAPI!"}
@app.get("/hello/{name}")
def say_hello(name: str):
return {"message": f"Hello, {name}!"}
启动项目
uvicorn main:app --host 0.0.0.0 --port 8080
或者
fastapi dev main.py