Python 8天极速入门笔记(大模型工程师专用):第四篇-判断与循环(Python流程控制,批量处理必备)

一、开篇回顾 + 今日目标

  • 回顾:Day3掌握了列表和字典两大核心数据结构,能存储批量对话、模型配置,今日学习Python流程控制,实现代码的逻辑判断和批量执行。

  • 今日目标:

    • 熟练掌握if判断语句(单条件、多条件),能实现逻辑判断(如模型参数校验);

    • 熟练掌握for循环语句,能实现批量处理(如批量调用大模型、遍历对话历史);

    • 掌握while循环(基础用法,按需掌握),理解循环的终止条件;

    • 结合大模型场景,实现参数校验、批量处理prompt等实操,能独立写带逻辑的代码。

二、核心知识点(细致讲解,兼顾Python基础与大模型场景)

(一)if判断语句(逻辑判断,大模型参数校验常用)

    1. 核心作用:根据条件是否成立,执行不同的代码块(满足条件执行A,不满足执行B)。
    1. 基础语法(单条件)
    • 语法格式(注意缩进,Python用缩进区分代码块,一般4个空格): if 条件: `` 条件成立时执行的代码(缩进) ``else: `` 条件不成立时执行的代码(缩进)

    • 条件:可以是布尔值(True/False)、比较表达式(如>、<、==、!=)、逻辑表达式(and、or、not)

    • 示例(大模型参数校验): temperature = 1.2 ``# 判断温度是否过高(条件:temperature > 1.0) ``if temperature > 1.0: `` print("警告:模型温度过高,随机性太强,建议调整为≤1.0") ``else: `` print("模型温度正常")

    1. 多条件判断(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配置合理")

    • 大模型场景:多条件判断常用于模型参数合法性校验、对话类型判断(用户/助手)等。

    1. 条件表达式(简化版if-else,按需掌握)
    • 语法:值1 if 条件 else 值2(条件成立返回值1,不成立返回值2)

    • 示例:temp_status = "异常" if temperature > 1.0 else "正常"

    • 适用场景:简单的条件判断,简化代码(大模型参数状态标记常用)。

    1. 常用比较运算符与逻辑运算符(必记)
    • 比较运算符(用于构建条件):

      • ==:等于(判断两个值是否相等,注意不是赋值=)

      • !=:不等于

      • >:大于,<:小于,>=:大于等于,<=:小于等于

    • 逻辑运算符(用于组合条件):

      • 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("模型参数配置不合法")

    1. 易错点提醒(新手必看)
    • 混淆赋值符号=和等于符号==(条件中用==,赋值用=);

    • 忘记缩进或缩进不一致(Python缩进是强制的,缩进错误会报错);

    • 多条件判断时,条件顺序错误(优先判断优先级高的条件);

    • 逻辑运算符使用错误(如用and代替or,导致条件判断异常,比如判断参数合法时,误将"或"用成"与");

    • 条件判断中,布尔值直接与数字比较(如if True == 1,虽然结果正确,但不规范,建议直接用if True)。

(二)for循环语句(批量处理,大模型高频使用)

    1. 核心作用:重复执行指定代码块,常用于批量处理数据(如批量遍历对话、批量调用大模型、批量处理prompt),比手动重复写代码高效得多。
    1. 基础语法(遍历可迭代对象)
    • 语法格式: 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']}")

    1. 遍历字典(大模型配置批量处理)
    • 常用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位小数)。

    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等场景。

    1. 易错点提醒(新手必看)
    • 循环缩进错误:循环体代码必须缩进,否则不被视为循环内的代码,会报错或逻辑异常;

    • 遍历列表时修改列表长度(如新增、删除元素),会导致遍历不完整(如遍历prompt列表时,删除某个prompt,后续元素会被跳过);

    • range()函数的结束值不包含,如range(1,5)只能生成1-4的数字,想要生成1-5需写range(1,6);

    • 遍历字典时,直接用for循环遍历的是键,不是值(如需遍历值,需用.values())。

(三)while循环(基础用法,按需掌握)

    1. 核心作用:根据条件是否成立,重复执行代码块,直到条件不成立时终止循环(适用于循环次数不确定的场景)。
    1. 基础语法
    • 语法格式: 初始条件(如计数变量赋值) ``while 循环条件: `` 循环执行的代码(缩进) `` 循环终止条件(如计数变量自增/自减,避免死循环)

    • 示例(模拟大模型对话,直到用户输入"退出"): # 模拟大模型对话循环 ``chat_flag = True # 循环条件变量 ``while chat_flag: `` user_input = input("请输入你的问题(输入'退出'结束对话):") `` if user_input == "退出": `` chat_flag = False # 终止循环 `` print("对话结束,感谢使用!") `` else: `` print(f"大模型响应:针对'{user_input}'的回答(实际开发替换为真实调用)\n")

    • 大模型场景:适用于对话机器人、持续监听模型调用请求等循环次数不确定的场景。

    1. 关键提醒:避免死循环
    • 死循环:循环条件永远成立,代码会一直重复执行,无法终止(如while True: print("hello"),需强制关闭程序);

    • 避免方法:循环体内必须有修改循环条件的代码(如计数变量自增、条件变量赋值为False),确保循环能正常终止。

    1. 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分钟巩固)

    1. 定义一个模型配置字典,包含model、temperature、max_tokens、top_p四个参数,用if判断校验所有参数的合法性(temperature和top_p在0-1.0之间,max_tokens在256-1024之间),打印校验结果;
    1. 定义一个prompt列表,包含6个大模型相关的prompt(其中2个为空或纯空格),用for循环遍历,过滤无效prompt,统计有效prompt数量,并批量打印有效prompt;
    1. 用while循环模拟大模型对话,要求:用户输入"停止"时结束对话,输入空内容时提示"请输入有效问题",否则模拟大模型响应;
    1. 结合for循环和if判断,遍历一个包含5个模型配置的列表,筛选出temperature在0.5-0.8之间的配置,并打印出来。

六、次日预告

  • Day5将讲解Python核心中的核心------函数(def定义),学会函数封装后,能将大模型调用逻辑、参数校验逻辑、批量处理逻辑封装成可复用的代码,避免重复写代码,大幅提升开发效率,为后续大模型脚本开发打下核心基础!
相关推荐
Xudde.2 小时前
班级作业笔记报告0x03
笔记
猹叉叉(学习版)2 小时前
【系统分析师_知识点整理】 9.系统规划与分析
笔记·软考·系统分析师·系统规划
新加坡内哥谈技术2 小时前
AI代理可能会让自由软件再次变得重要
人工智能·ai编程
chushiyunen2 小时前
langchain和pytorch结合笔记
pytorch·笔记·langchain
鱼鳞_2 小时前
Java学习笔记_Day18(数据结构)
java·笔记·学习
Ulyanov2 小时前
雷达电子战仿真引擎设计与实现系列(三):信号处理与目标检测
python·tkinter·系统仿真·雷达电子战
Ricky_Theseus2 小时前
探索群体智慧:蚁群算法(ACO)从原理到实践——python实现
python·算法·机器学习
Hello.Reader2 小时前
PySpark 依赖管理集群环境下如何分发 Python 包
开发语言·python
南境十里·墨染春水10 小时前
C++传记(面向对象)虚析构函数 纯虚函数 抽象类 final、override关键字
开发语言·c++·笔记·算法