python学习笔记

一、安装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
相关推荐
杨逢昌工厂6S管理3 小时前
150-杨逢昌一线现场诊断笔记:越管一线越抵触背后的熵增机理与基准化治理
经验分享·笔记·职场和发展·学习方法
Star(up up up)6 小时前
Redis Windows 安装教程:使用Windows 的 Redis 压缩包
redis·笔记·学习·程序人生·云原生·学习方法·改行学it
希和20276 小时前
江科大 51 单片机课程笔记:DS1302 实时时钟 + LCD1602 可调电子钟(小白逐行讲解)
笔记·单片机·嵌入式硬件
岑梓铭7 小时前
《考研408数据结构》第七章(B树 和 B+树)复习笔记
数据结构·笔记·b树·考研·408
乌暮8 小时前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
Go Work12 小时前
docker 占满根分区时先分清谁在吃盘
经验分享·笔记
30955666612 小时前
股票接口返回 404 与空数组的排查笔记:证书状态与级别参数
java·笔记·python·ios·iphone·股票数据api·股票数据接口
蒸蒸yyyyzwd13 小时前
从邓明学习的后端笔记
笔记·学习
岑梓铭13 小时前
《考研408数据结构》第八章(排序)复习笔记
数据结构·笔记