资讯详情

Python函数return详解:从自动售货机到大语言模型应用

📅 2026/10/6 17:31:47 | 华诺云谱 👁 阅读
Python函数return详解:从自动售货机到大语言模型应用
上一课我们认识了函数这只“小盒子”知道把代码装进去就能反复使用。今天第15课我们要拆开函数里最特别的一份“礼物”——return。这个英文单词的意思是“返回、归还”很多同学第一眼看到它以为它只是结束函数用的其实它是函数把计算结果“亲手递给你”的那只手。学大语言模型应用时return尤其重要因为当你写一个函数去调用大模型模型给你的回答正是靠return送回程序里的。可以这么说没有return的函数就像一台只亮灯不出票的机器看着在运转但你什么也拿不到。这节课我打算用一个非常轻松的节奏来讲先通过生活里的故事理解return是干什么的再上手写几个带return的小程序然后专门看看在大语言模型应用里return是怎么帮我们“跑腿”的。最后我会把我带小学生时遇到的各种奇奇怪怪问题整理成一份避坑手册家长们也可以一起看辅导时不抓狂。1. 函数“带礼物回家”用生活语言认识return1.1 自动售货机的故事你在“调用”机器在“返回”想象你站在一台自动售货机前面投进去5块钱按一下“可乐”按钮然后“哐当”一声一瓶可乐从出口掉出来。在这个场景里售货机就是一个函数你投进去的钱相当于传给函数的参数而掉出来的可乐就是函数的返回值。如果你按了按钮机器咔咔响了一阵却没有东西掉出来你肯定会觉得这台机器坏了。编程里的函数也一样有些函数执行完需要把一个结果交回给调用它的地方这个“交回”的动作就是return。return后面跟着的东西就是你要的那瓶“可乐”。为什么这个比喻特别适合小学生因为孩子对“买东西找零”有天然的生活经验。函数就像售货员你告诉它需求它忙完以后必须把手里的结果递给你。如果售货员忙半天什么都不递出来你就不知道事情到底办成没有。return就是那个“把东西递给你”的动作。我再举一个例子你让爸爸去超市帮忙买一袋盐爸爸回来的时候盐就是“返回值”。如果爸爸空着手回来你会问“盐呢”——在程序世界里那个“盐呢”的答案就要靠return来回答。1.2 为什么需要保存结果从“计算出”到“拿得到”有同学会问“老师函数里不是可以直接print把结果打印出来吗为什么要多此一举用return”这个问题的答案是孩子理解return的第一次飞跃。你可以这样跟孩子解释print像是把答案大声喊出来喊完就没了别人记不住而return像把答案写在一张纸条上交给你你可以把纸条放进书包什么时候想用都能拿出来。程序里的“记住”和“拿到”比“看到”更重要。举个例子我们想写一个“计算长方形面积”的函数。如果函数里只print结果那这个结果就只是“看了一眼”但如果用return返回面积我们就能把这个数值存到一个变量里接着用它去做别的事比如比较两个长方形谁更大或者把面积加起来算总面积。这就是return的核心价值函数负责计算外面负责使用。计算和使用的分离让程序可以像搭积木一样把一个函数的返回值喂给下一个函数当输入。在大语言模型应用里这个思路会被反复用到——你调用一次模型接口模型把回答返回来你再去处理这个回答。2. 写第一个会“回信”的函数return基础语法2.1 一个计算字数的函数三行代码理解return我们直接看Python代码。假设你收到一段大语言模型生成的回答你想知道这段回答一共多少个字就可以写一个函数def count_words(text): # text是传进来的字符串len()用来数长度 result len(text) return result这个函数做了三件事接收一段文字用len()算出字数的结果再用return把结果交出去。调用的时候这样写answer count_words(你好我是人工智能助手。) print(answer)运行之后屏幕上会显示一个数字比如11。关键就在这一行answer count_words(你好我是人工智能助手。)。这个等号的意思是把函数返回的那个数字装进answer这个变量里。如果没有returnanswer就是None什么都没有后面print出来的就不是数字了。我在课堂上的做法是先让孩子在这个函数里加上return运行然后把return那一行删掉再运行。看着屏幕上出现“None”孩子一下子就明白了原来没有return函数虽然跑了一圈但什么都没带回来。这种“对比实验”比讲十遍理论都有效。2.2 return后面可以跟什么数字、文字、计算式return后面接的东西比很多同学想的更灵活。它可以是具体的数字像return 3也可以是文字像return 你好还可以是一个计算式比如def add(a, b): return a b这个函数返回的不是a也不是b而是a加b的结果。程序执行到return这一行时会先算出后面的表达式再把结果返回到调用处。所以return a b其实相当于先算出一个新值再把它交出去。更妙的是return后面还可以接另一个函数的调用。你可以在一个函数里写return double(3)意思是先让double函数计算3的两倍再把那个结果直接返回。这样函数之间就像接力赛一样一棒接一棒。给小学生的记忆口诀是return是顺风车不管后面带着什么只要到了这一行它就把东西打包放上顺风车直接送到调用函数的那个地方。我们不需要理解计算机底层怎么搬运只需要知道这个“打包送达”的过程。2.3 最容易混的一对return和print到底差在哪这是课堂上每个班都会有人问的问题也是家长辅导时最容易卡住的地方。我用一个“考试交卷”的例子来讲print是你在考场上大声喊出答案全班都听到了但喊完你手上并没有写下来的答案纸return是你把答案写在答题纸上走出考场后这张纸还在你手里你可以带去下一场考试用。从技术角度看print是一个“输出到屏幕”的功能它负责让人看见内容return是一个“函数向外传递结果”的机制它负责让程序继续使用内容。两件事经常一起出现但它们服务的目标完全不同。如果你写了一个只print不return的函数你在函数外面就永远拿不到它的计算结果哪怕你写result add(1, 2)result也只会是None。这就像你让同桌把答案写在黑板上展示但你想要一份带回家的答案他却没有给你。程序运行起来不报错但后面的代码完全没法用这个结果。3. 让函数替我们“问”大语言模型return的实战升级3.1 设计一个ask_llm函数输入问题返回答案现在我们把return放到大语言模型应用的真实场景里。很多同学听到“大语言模型”会觉得很高大上其实你可以把它理解成一位知识非常渊博的“网上邻居”。我们给它一句话它会回我们一句话。编程里和这位邻居打交道时最标准的做法就是写一个函数。想象一下这样的函数def ask_llm(question): # 假装这里是调用大模型的代码 # 模型经过思考生成了一段回答 answer 这是模型生成的回答 return answer实际调用时你只需要写reply ask_llm(请用一句话介绍北京的春天) print(reply)这里的reply就是那个大模型回答被return接住的变量。哪怕以后你接的是真实的云服务接口核心逻辑也是完全一样的你发送问题给接口接口返回一段JSON数据你的代码里往往是return response_data把那段数据原封不动地交回给调用者。所以return不是Python小练习里的玩具它是真实AI应用里每天都要用的基本功。市面上有人把大语言模型、生成语言模型这些名词混着用其实对小学生来说不用太纠结它们是不是一个东西。你只需要知道我们写代码跟“模型”打交道时函数负责把用户的问题送进去再把模型的回答带回来。这个“带回来”的动作靠的就是return。3.2 参数是“输入口”return是“输出口”函数像一台机器左边有一个输入口右边有一个输出口。参数就是走进输入口的东西return就是输出口递出来的东西。没有参数函数没办法接收外面的信息没有return函数干完活也不会把结果交给外面。两个加在一起函数才算真正“通”了。我带孩子写AI小工具时会故意用这个思路设计练习。比如做一个“情绪温度计”函数传入一句话返回一个分数分数代表这句话是开心还是难过。函数的参数负责接收句子函数内部做一些简单的关键词判断最后用return把分数送出来。孩子看到同一个函数传进不同的话返回不同的分数马上就理解了“输入-处理-输出”这个万能模型。这个模型以后会反复出现。哪怕你学的是图形化编程、JavaScript或者其他任何语言只要有函数的地方就有参数和return这对黄金搭档。小学阶段把这一个模型吃透后面学任何语言都不会慌。3.3 return在真实AI应用里会返回什么讲到这里有些家长可能会问真实的大语言模型返回的东西和课堂上那种简简单单的文字一样吗真实的调用确实会复杂一些模型接口返回的往往是一坨JSON数据里面有回答内容、使用token数量、生成耗时等等。但坏消息是复杂好消息是这些数据依然是通过return送出来的。假设你用一个现成的SDK写代码常常会看到这样的大致结构def get_ai_answer(prompt): response client.chat.completions.create( modelgpt-4o-mini, messages[{role: user, content: prompt}] ) return response.choices[0].message.content这里面的response是一个很复杂的对象但我们并不需要在函数里把它全部拆开而是直接取到我们想要的那一段文字然后return出去。哪怕是职业程序员也不会把整个返回对象暴露到每个角落都是“拿到手挑出需要的再传下去”。这和课堂上return一个字符串、一个数字的思路一模一样。在小学生阶段我不建议急着让孩子去理解JSON、API这些名词先让他们形成“函数最后会把一个结果还给我”的直觉就够了。等未来某一天他们真的接上大模型接口发现接口返回的数据可以用return交给别的函数继续处理自然会回想起今天这节课。4. 踩坑现场记录return里常见的几个“没想到”4.1 return之后还会执行吗函数“到此为止”这是孩子第一次写多个return时最容易犯的错也是真实的运行时行为。在函数里只要执行到return这一行函数就会立刻结束后面的代码不会再跑。return就像是公交车的终点站到了站乘客全部下车司机不会再往前开。看这个例子def test(): return 1 print(这行永远不会打印)函数执行到return 1就停住了下面的print完全不会被执行。很多小白会问“为什么我的打印语句不见了”答案就在这里。这不是bug这是return的规则它既是“交结果”也是“喊停”。实际调试时我常让孩子做一个“return定位”练习在一段函数里故意在return前后各写一个print运行后看哪条print出现了哪条没出现。这个小小的实验能让他们牢牢记住“return之后是代码禁区”。如果你检查自己的代码发现某个print永远不显示先去看看是不是上面有个return提前截胡了。4.2 多个return让函数学会做选择题一个函数里可以有多个return但同一时刻只会有一个真正执行。这有点像交警指挥交通到了分岔路口只能选一条路走。最常见的写法是结合if判断def check_score(score): if score 60: return 及格 else: return 需要加油调用时传入的分数不同返回的结果就不同。这个函数里有两条return但每次调用只走其中一条。如果分数是80就走第一条如果是45就走第二条。我特别提醒家长一点孩子写这种多return函数时经常忘记写第二个return导致函数“无路可走”。比如只写了if里的return没有写else分支最后程序会默认返回None。像上面的例子如果去掉else里的return不及格的学生就什么都得不到。解决的办法很简单先想清楚“如果条件不满足应该返回什么”再动手写代码。还有一种情况是函数内部没有if但写了多个return比如def early_return(): return 第一个 return 第二个这种代码里第二个return永远碰不到。这在语法上没错但属于逻辑冗余孩子要学会删掉它。写代码不只是让程序能跑还要让读代码的人一眼看懂你的意图。4.3 常见问题速查表我把课堂上出现频率最高的问题整理成了表格家长可以直接对照排查问题现象可能原因解决方法函数外变量等于None函数里只print了结果没用return把print改成return想返回多个数只会返回最后一个多个return排成了一列前面的执行不到用元组返回多个值比如return a, b函数里的print没显示执行到前面的return函数提前结束了把print移到return之前明明return了数字外面变成字符串返回时用str()转换过类型检查return后的表达式统一类型调用函数没有用变量接住返回值没有被赋值就消失了写 result 函数名()没有调用函数直接试returnreturn只能写在函数里先定义函数再在外部调用它这份表格不是让孩子背的而是让他们在遇到问题时学会“对照症状找原因”。会排查问题比会默写代码更重要。4.4 我常用的调试三招怎么看return到底给了什么第一招在调用处打印返回值。也就是在函数外面写print(函数名(参数))这一步能让你立刻看到return交出了什么。大多数时候问题出在返回值的类型或内容不如预期一眼就能发现。第二招用type()检查类型。如果怀疑返回的东西不是想要的类型可以在外面加上print(type(函数名(参数)))。比如明明想返回数字却返回了字符串type就会直接告诉你真相。第三招临时加一个变量。我会让孩子在函数里多写一行print(我要返回的是, result)确认result是对的那个值再写return。这招看起来笨但在初学阶段非常有效能帮孩子把“计算过程”和“返回结果”分开看清楚。等熟练以后可以删掉这些临时的print。这三个方法都能在IDLE或者你用的编程环境里直接用不用额外装任何东西。调试不是大人的专利小学生完全可以掌握。我第一次教这招时有个孩子回家后自己给哥哥的代码“看病”居然真的找出一个返回了None的bug特别有成就感。5. 课后练习与下一步把return变成自己的工具5.1 三道由易到难的小练习练习一写一个函数接收一个数字返回它的两倍。要求必须用return并在函数外打印结果。这道题练的是最基本的“参数进、return出”。练习二写一个函数接收两个数字返回较大的那个。提示可以用if和return配合。这道题练的是“二选一”的return结构。练习三写一个函数接收一段文字返回这段文字加上“已收到”这几个字。然后把这个函数和之前学过的内容组合起来先让用户输入一句话再调用这个函数最后打印返回值。这道题练的是把return结果接到真实的使用场景里。我给孩子们的建议是不要追求一次写对先故意写几个错误的版本看看程序怎么报错再看看返回值是什么通过“试错”来建立自己的经验库。大胆犯错反复尝试这本身就是编程最有趣的部分。5.2 学完return后知识地图的下一站return学完函数这块最重要的拼图就差不多齐了。有了参数函数能接收外面传进来的信息有了return函数能把结果交出去。这两样东西配合起来你就可以开始尝试做真正的小工具了。比如你可以写一个函数接收一句中文返回一句英文再写一个函数接收英文返回这段英文的长度。把两个函数串在一起就形成了一个最简单的“文字处理流水线”。在大语言模型应用的世界里这种“把结果从一个函数传给下一个函数”的模式正是构建更多复杂应用的基础——你可以把用户输入清理干净再喂给模型模型返回答案后再让它去查询天气一切工作流本质上都是函数之间不停地把return结果递来递去。如果想继续深入学习下一课我建议聊聊“列表和字典”因为大语言模型返回的内容通常是被包在这些容器结构里的。学会了容器再回头看return返回的一坨数据你就能像拆礼物一样把它一层层剥开取出自己真正需要的那份宝藏。我个人在带小学生过程中的体会是函数是不是写得优雅并不重要重要的是孩子能感觉到“我写了一个东西它真的把结果交回给我了”。这个小小的成就感是持续学编程最强有力的引擎。上一课孩子学会“把代码装进函数”这一课孩子学会“让函数把结果交给别人”两节课连起来他们手里就已经握住了所有程序之间协作的万能接口。有了这个接口大语言模型应用的探险之路才算真正开始。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑