一、开篇回顾 + 今日目标
-
回顾:Day3掌握了列表和字典两大核心数据结构,能存储批量对话、模型配置,今日学习Python流程控制,实现代码的逻辑判断和批量执行。
-
今日目标:
-
熟练掌握if判断语句(单条件、多条件),能实现逻辑判断(如模型参数校验);
-
熟练掌握for循环语句,能实现批量处理(如批量调用大模型、遍历对话历史);
-
掌握while循环(基础用法,按需掌握),理解循环的终止条件;
-
结合大模型场景,实现参数校验、批量处理prompt等实操,能独立写带逻辑的代码。
-
二、核心知识点(细致讲解,兼顾Python基础与大模型场景)
(一)if判断语句(逻辑判断,大模型参数校验常用)
-
- 核心作用:根据条件是否成立,执行不同的代码块(满足条件执行A,不满足执行B)。
-
- 基础语法(单条件)
-
语法格式(注意缩进,Python用缩进区分代码块,一般4个空格):
if 条件: `` 条件成立时执行的代码(缩进) ``else: `` 条件不成立时执行的代码(缩进) -
条件:可以是布尔值(True/False)、比较表达式(如>、<、==、!=)、逻辑表达式(and、or、not)
-
示例(大模型参数校验):
temperature = 1.2 ``# 判断温度是否过高(条件:temperature > 1.0) ``if temperature > 1.0: `` print("警告:模型温度过高,随机性太强,建议调整为≤1.0") ``else: `` print("模型温度正常")
-
- 多条件判断(if-elif-else)
-
语法格式:用于判断多个条件,满足一个条件就执行对应的代码块,后续条件不再判断:
if 条件1: `` 条件1成立执行的代码 ``elif 条件2: `` 条件1不成立、条件2成立执行的代码 ``elif 条件3: `` 条件1、2不成立、条件3成立执行的代码 ``else: `` 所有条件都不成立执行的代码 -
示例(大模型max_tokens参数校验):
max_tokens = 2048 ``if max_tokens > 1024: `` print("最大生成tokens过多,可能影响推理速度") ``elif max_tokens < 256: `` print("最大生成tokens过少,可能无法完成完整回答") ``else: `` print("最大生成tokens配置合理") -
大模型场景:多条件判断常用于模型参数合法性校验、对话类型判断(用户/助手)等。
-
- 条件表达式(简化版if-else,按需掌握)
-
语法:值1 if 条件 else 值2(条件成立返回值1,不成立返回值2)
-
示例:temp_status = "异常" if temperature > 1.0 else "正常"
-
适用场景:简单的条件判断,简化代码(大模型参数状态标记常用)。
-
- 常用比较运算符与逻辑运算符(必记)
-
比较运算符(用于构建条件):
-
==:等于(判断两个值是否相等,注意不是赋值=)
-
!=:不等于
-
>:大于,<:小于,>=:大于等于,<=:小于等于
-
-
逻辑运算符(用于组合条件):
-
and:逻辑与(两个条件都成立,整体才成立)
-
or:逻辑或(两个条件有一个成立,整体就成立)
-
not:逻辑非(取反,条件成立变不成立,反之亦然)
-
-
示例(组合条件校验):
temperature = 0.7 ``max_tokens = 512 ``# 条件:温度在0-1.0之间,且max_tokens在256-1024之间 ``if 0 <= temperature <= 1.0 and 256 <= max_tokens <= 1024: `` print("模型参数配置合法") ``else: `` print("模型参数配置不合法")
-
- 易错点提醒(新手必看)
-
混淆赋值符号=和等于符号==(条件中用==,赋值用=);
-
忘记缩进或缩进不一致(Python缩进是强制的,缩进错误会报错);
-
多条件判断时,条件顺序错误(优先判断优先级高的条件);
-
逻辑运算符使用错误(如用and代替or,导致条件判断异常,比如判断参数合法时,误将"或"用成"与");
-
条件判断中,布尔值直接与数字比较(如if True == 1,虽然结果正确,但不规范,建议直接用if True)。
(二)for循环语句(批量处理,大模型高频使用)
-
- 核心作用:重复执行指定代码块,常用于批量处理数据(如批量遍历对话、批量调用大模型、批量处理prompt),比手动重复写代码高效得多。
-
- 基础语法(遍历可迭代对象)
-
语法格式:
for 变量 in 可迭代对象: `` 循环执行的代码(缩进) -
可迭代对象:Python中可循环遍历的对象,大模型场景常用的有列表(对话历史、prompt列表)、字典(模型配置)、字符串(prompt文本)等。
-
示例1(遍历prompt列表,批量处理):
# 定义批量prompt列表 ``prompts = ["介绍大模型", "Python调用大模型", "RAG原理", "大模型参数调优"] ``# 批量遍历prompt,模拟大模型调用 ``for prompt in prompts: `` print(f"当前处理prompt:{prompt}") `` print("模拟模型响应:基于该prompt生成对应回答(实际开发替换为真实调用)\n") -
示例2(遍历对话历史,提取用户消息):
# 定义对话历史列表 ``chat_history = [ `` {"role": "user", "content": "什么是大模型?"}, `` {"role": "assistant", "content": "大模型是参数规模庞大、训练数据海量的AI模型"}, `` {"role": "user", "content": "Python怎么调用大模型?"} ``] ``# 批量提取用户发送的消息 ``print("用户历史消息:") ``for msg in chat_history: `` if msg["role"] == "user": # 结合if判断,筛选用户消息 `` print(f"- {msg['content']}")
-
- 遍历字典(大模型配置批量处理)
-
常用3种遍历方式,重点掌握遍历键值对(最常用):
# 定义模型配置字典 ``model_config = {"model": "qwen-7b", "temperature": 0.7, "max_tokens": 1024, "top_p": 0.9} `` ``# 1. 遍历键(获取所有配置项名称) ``print("模型配置项:") ``for key in model_config: `` print(f"- {key}") `` ``# 2. 遍历值(获取所有配置值) ``print("\n模型配置值:") ``for value in model_config.values(): `` print(f"- {value}") `` ``# 3. 遍历键值对(推荐,获取配置项和对应值) ``print("\n完整模型配置:") ``for key, value in model_config.items(): `` print(f"{key}:{value}") -
大模型场景:遍历字典常用于批量打印模型配置、批量修改配置参数(如将所有数值类型的配置值保留1位小数)。
-
- range()函数(生成指定范围的数字,辅助循环)
-
语法:range(起始值, 结束值, 步长),起始值默认0,步长默认1,结束值不包含(如range(5) → 0,1,2,3,4)。
-
示例(批量调用大模型N次):
# 模拟批量调用大模型3次 ``for i in range(1, 4): `` print(f"第{i}次调用大模型:") `` print(f"调用参数:model=qwen-7b, temperature=0.6") `` print("调用成功,返回响应结果\n") -
大模型场景:常用于固定次数的批量调用、批量生成prompt等场景。
-
- 易错点提醒(新手必看)
-
循环缩进错误:循环体代码必须缩进,否则不被视为循环内的代码,会报错或逻辑异常;
-
遍历列表时修改列表长度(如新增、删除元素),会导致遍历不完整(如遍历prompt列表时,删除某个prompt,后续元素会被跳过);
-
range()函数的结束值不包含,如range(1,5)只能生成1-4的数字,想要生成1-5需写range(1,6);
-
遍历字典时,直接用for循环遍历的是键,不是值(如需遍历值,需用.values())。
(三)while循环(基础用法,按需掌握)
-
- 核心作用:根据条件是否成立,重复执行代码块,直到条件不成立时终止循环(适用于循环次数不确定的场景)。
-
- 基础语法
-
语法格式:
初始条件(如计数变量赋值) ``while 循环条件: `` 循环执行的代码(缩进) `` 循环终止条件(如计数变量自增/自减,避免死循环) -
示例(模拟大模型对话,直到用户输入"退出"):
# 模拟大模型对话循环 ``chat_flag = True # 循环条件变量 ``while chat_flag: `` user_input = input("请输入你的问题(输入'退出'结束对话):") `` if user_input == "退出": `` chat_flag = False # 终止循环 `` print("对话结束,感谢使用!") `` else: `` print(f"大模型响应:针对'{user_input}'的回答(实际开发替换为真实调用)\n") -
大模型场景:适用于对话机器人、持续监听模型调用请求等循环次数不确定的场景。
-
- 关键提醒:避免死循环
-
死循环:循环条件永远成立,代码会一直重复执行,无法终止(如while True: print("hello"),需强制关闭程序);
-
避免方法:循环体内必须有修改循环条件的代码(如计数变量自增、条件变量赋值为False),确保循环能正常终止。
-
- for循环与while循环的区别(重点区分)
-
for循环:循环次数确定(如遍历列表、固定次数),代码简洁,大模型批量处理场景优先使用;
-
while循环:循环次数不确定(如根据用户输入决定是否继续),灵活性高,但需注意避免死循环。
(四)循环与判断结合(大模型实战核心用法)
-
核心场景:批量处理数据时,结合if判断筛选数据、校验数据,实现更灵活的逻辑(大模型开发中最常用的组合方式)。
-
示例1(批量校验模型参数,筛选合法配置):
# 定义多个模型配置(模拟批量配置) ``model_configs = [ `` {"model": "qwen-7b", "temperature": 0.8, "max_tokens": 512}, `` {"model": "chatglm3-6b", "temperature": 1.2, "max_tokens": 2048}, `` {"model": "llama-7b", "temperature": 0.6, "max_tokens": 1024}, `` {"model": "baichuan-7b", "temperature": -0.1, "max_tokens": 128} ``] `` ``# 批量校验配置,筛选出合法的配置 ``print("合法的模型配置:") ``for config in model_configs: `` # 条件:temperature在0-1.0之间,max_tokens在256-1024之间 `` if 0 <= config["temperature"] <= 1.0 and 256 <= config["max_tokens"] <= 1024: `` print(config) `` else: `` print(f"配置{config['model']}不合法,跳过") -
示例2(批量处理对话历史,过滤无效消息):
# 定义包含无效消息的对话历史 ``chat_history = [ `` {"role": "user", "content": "你好"}, `` {"role": "assistant", "content": ""}, # 无效消息(空内容) `` {"role": "user", "content": "Python调用大模型的方法"}, `` {"role": "assistant", "content": "使用transformers库调用"}, `` {"role": "user", "content": " "}, # 无效消息(纯空格) ``] `` ``# 批量过滤无效消息,保留有效对话 ``valid_chat = [] ``for msg in chat_history: `` # 条件:内容不为空且去除空格后仍有内容 `` if msg["content"].strip() != "": `` valid_chat.append(msg) `` ``print("过滤后的有效对话:") ``for idx, msg in enumerate(valid_chat): `` print(f"第{idx+1}条:{msg['role']} → {msg['content']}")
三、今日实操(代码可直接复制,贴合大模型场景)
-
实操1:if判断实操(模型参数校验)
python# 模型参数校验(大模型开发必备) temperature = 0.9 max_tokens = 768 top_p = 0.85 # 1. 单条件判断:校验温度是否合理 if temperature > 1.0 or temperature < 0: print("❌ 温度参数不合法(需在0-1.0之间)") else: print("✅ 温度参数合法") # 2. 多条件判断:校验max_tokens if max_tokens > 1024: print("⚠️ 最大tokens过多,可能影响推理速度") elif max_tokens < 256: print("⚠️ 最大tokens过少,可能无法生成完整回答") else: print("✅ 最大tokens配置合理") # 3. 组合条件判断:校验所有参数 if 0 <= temperature <= 1.0 and 256 <= max_tokens <= 1024 and 0 <= top_p <= 1.0: print("✅ 所有模型参数配置合法,可正常调用") else: print("❌ 部分参数不合法,请检查调整") -
实操2:for循环实操(批量处理prompt)
python# 批量处理prompt,模拟大模型批量调用 prompts = [ "介绍大模型的核心优势", "Python中列表和字典的区别", "如何用Python调用qwen-7b模型", "RAG技术的核心原理", "大模型参数调优的常用方法" ] # 1. 遍历prompt,批量模拟调用 print("批量处理prompt(模拟大模型调用):") for idx, prompt in enumerate(prompts, start=1): # start=1,索引从1开始 print(f"\n第{idx}个prompt:{prompt}") print(f"模型响应:基于'{prompt}'生成专业回答(实际开发替换为真实API调用)") # 2. 统计有效prompt数量(过滤空prompt) valid_prompts = [p for p in prompts if p.strip() != ""] # 列表推导式(简化写法) print(f"\n有效prompt数量:{len(valid_prompts)}") print("有效prompt列表:", valid_prompts) -
实操3:循环与判断结合(批量处理对话历史)
python# 批量处理对话历史,提取用户问题并校验有效性 chat_history = [ {"role": "user", "content": "什么是Python?"}, {"role": "assistant", "content": "Python是一门简洁易用的编程语言"}, {"role": "user", "content": ""}, {"role": "assistant", "content": "请输入有效的问题"}, {"role": "user", "content": "Python如何处理大模型返回的结果?"}, {"role": "user", "content": " "}, {"role": "assistant", "content": "问题不能为空,请重新输入"} ] # 提取所有有效用户问题 user_questions = [] for msg in chat_history: # 条件:角色是user,且内容有效(非空、非纯空格) if msg["role"] == "user" and msg["content"].strip() != "": user_questions.append(msg["content"]) # 打印结果 print("用户有效问题列表:") for idx, question in enumerate(user_questions, start=1): print(f"{idx}. {question}") # 模拟批量调用大模型回答用户问题 print("\n批量回答用户问题:") for question in user_questions: print(f"\n用户问题:{question}") print(f"大模型回答:针对该问题的专业解答(实际开发替换为真实调用)") -
实操4:while循环实操(模拟大模型对话)
python# 模拟大模型对话机器人,直到用户输入"退出" print("大模型对话机器人(输入'退出'结束对话)") print("="*50) # 初始条件 continue_chat = True while continue_chat: # 获取用户输入 user_input = input("你:") # 判断用户输入 if user_input.strip().lower() == "退出": continue_chat = False print("大模型:对话结束,感谢使用!") elif user_input.strip() == "": print("大模型:请输入有效的问题,不能为空哦~") else: # 模拟大模型响应 print(f"大模型:针对'{user_input}'的回答,这里是模拟响应(实际开发替换为真实调用)")
四、易错点汇总(新手避坑)
-
if判断中,混淆赋值符号=和等于符号==,导致条件判断失效(如if temperature = 1.0,会报错);
-
循环缩进错误,循环体代码未缩进或缩进不一致,导致代码不执行或报错;
-
遍历列表时修改列表长度(新增/删除元素),导致遍历不完整;
-
while循环未设置终止条件,导致死循环;
-
遍历字典时,误将键当作值使用(如直接print(key),想打印值却未用.values());
-
逻辑运算符使用错误(and/or混淆),导致条件判断结果异常。
五、今日练习(10分钟巩固)
-
- 定义一个模型配置字典,包含model、temperature、max_tokens、top_p四个参数,用if判断校验所有参数的合法性(temperature和top_p在0-1.0之间,max_tokens在256-1024之间),打印校验结果;
-
- 定义一个prompt列表,包含6个大模型相关的prompt(其中2个为空或纯空格),用for循环遍历,过滤无效prompt,统计有效prompt数量,并批量打印有效prompt;
-
- 用while循环模拟大模型对话,要求:用户输入"停止"时结束对话,输入空内容时提示"请输入有效问题",否则模拟大模型响应;
-
- 结合for循环和if判断,遍历一个包含5个模型配置的列表,筛选出temperature在0.5-0.8之间的配置,并打印出来。
六、次日预告
- Day5将讲解Python核心中的核心------函数(def定义),学会函数封装后,能将大模型调用逻辑、参数校验逻辑、批量处理逻辑封装成可复用的代码,避免重复写代码,大幅提升开发效率,为后续大模型脚本开发打下核心基础!