尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
教孩子理解变量作用域:用Python 函数做一个小实验
为什么讲这个知识点变量作用域是很多孩子学 Python 时第一个看不见摸不着的坎。前面写的代码都在一个文件里从上往下跑变量随手就能用一旦开始写函数就会出现为什么函数里改了外面却没变为什么这里报 NameError这类问题。讲作用域最忌讳直接抛定义局部变量、全局变量、LEGB 规则。孩子的抽象思维还在发展中先让他看到现象、产生疑问、再动手验证比背概念有效得多。下面这个小实验就是用几行代码把作用域从抽象变具体。完整代码先给出一段可以完整跑通的代码建议让孩子先原样抄一遍运行观察输出再逐段改。# scope_demo.pycount0# 全局变量defadd_wrong():countcount1# 这里会出错print(函数内:,count)defadd_local():count100# 只是新建了一个局部变量print(函数内:,count)defadd_global():globalcount# 声明我用的是外面那个 countcountcount1print(函数内:,count)print(调用 add_local 前, 全局 count ,count)add_local()print(调用 add_local 后, 全局 count ,count)print(调用 add_global 前, 全局 count ,count)add_global()add_global()print(调用 add_global 后, 全局 count ,count)# 下面这一行取消注释会报错留给孩子自己试# add_wrong()预期输出调用 add_local 前, 全局 count 0 函数内: 100 调用 add_local 后, 全局 count 0 调用 add_global 前, 全局 count 0 函数内: 1 函数内: 2 调用 add_global 后, 全局 count 2代码要点拆解1. 函数内部的赋值默认创建局部变量add_local里的count 100Python 认为你在函数里定义了一个新的count它和外面那个count毫无关系。所以函数里打印 100函数外还是 0。这一点要让孩子重点对比同名不等于同一个变量。2. 函数内部只读外部变量是可以的如果把add_local改成只打印不赋值defshow():print(函数内看到的 count ,count)show()# 输出 0这时能读到全局的count。规律是函数内只用不赋值会去外面找一旦赋值就在函数内新建。这个分水岭是理解作用域的关键。3.global是显式声明不是万能写法add_global用global count告诉 Python下面这个count就是模块最外层那个。于是每次调用都真的把全局值加 1。要提醒孩子global能解决问题但滥用会让代码难以跟踪能用参数和返回值解决就别用全局。4.add_wrong为什么一定报错defadd_wrong():countcount1 函数里出现了对 count 的赋值Python 就把它判定为局部变量但执行 count1 时这个局部变量还没被赋值于是抛 UnboundLocalError。孩子最容易困惑的正是这里——明明外面有 count 啊。答案是**函数内只要有赋值语句就轮不到外面的变量了**。## 学生常见错误-**以为函数里改了外面就变**。这是最高频的误解add_local 那一段就是专门用来打破它的。可以让孩子在函数后再打印一次全局 count亲眼看到没变。--**报错信息看一半**。UnboundLocalError:local variablecountreferenced before assignment 这句话其实已经把答案写清楚了带着孩子逐词读一遍比直接告诉他结论有用。--**把 global 当补丁到处加**。看到报错就加 global代码能跑但逻辑混乱。可以反问如果两个函数都写 globalcount谁先谁后会影响结果吗让他自己推。--**参数和全局变量同名**。比如 deff(count): 又去用全局 count容易糊。建议初学者参数名和全局名尽量区分开。--**在循环里定义函数**。这属于更深的坑初学阶段先不展开但要知道边界。## 可以留的练习1.把 add_local 改成用 return 返回新值再让外面接收2.python3.defadd_return(n):4.returnn15.countadd_return(count)6.7.对比 global 写法说说哪种更好维护。8.写两个函数一个叫 set_name() 用 global 修改全局 name另一个叫 show_name() 只打印。先调用 show_name()再 set_name()再 show_name()观察三次输出。9.把 add_wrong 的报错信息抄写一遍圈出关键词 local 和 referenced before assignment用自己的话解释是什么意思。10.挑战题把 count 放进一个列表如 count[0]函数里写 count[0]count[0]1不加 global看看全局的列表有没有变并想想为什么。这题能引出可变对象的概念为后面讲列表传参埋伏笔。11.## 小结作用域不用一上来就讲 LEGB。先让孩子用 add_local 和 add_global 两个对照实验看到函数内赋值 → 新建局部变量加 global → 改的就是外面那个这两种截然不同的结果再回头补规则理解会顺很多。真正要记牢的就一句话**函数里对变量赋值Python 就先当它是局部的**——记住它大部分报错都能自己解释清楚。
RELATED

相关推荐

如何在UltraEdit中用正则表达式批量删除空格:TaoToken辅助排查配置异常

如何在UltraEdit中用正则表达式批量删除空格:TaoToken辅助排查配置异常

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/2 6:25:17
嵌入式Audio调试全攻略:I2S时序、Codec寄存器与无声失真排查

嵌入式Audio调试全攻略:I2S时序、Codec寄存器与无声失真排查

嵌入式分享#23:嵌入式外设调试思路 —— Audio 调试篇搞过音频外设调试的兄弟应该都有同感:这东西不像是串口或 GPIO 那样,看一眼电平、数一下波形就能出结果,Audio 链路里任何一个环节“软掉”,表现全都是同一个症状—…

📅 2026/10/2 6:25:17
OpenClaw插件安装踩坑记:从npm报错到AI Agent跑通

OpenClaw插件安装踩坑记:从npm报错到AI Agent跑通

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/2 6:25:17
MORE NEWS

更多资讯

📰

AI增强卫星动力学仿真:C语言环境下轻量级误差补偿模型

1. 为什么卫星动力学仿真突然需要AI介入——从轨道预报误差说起我第一次在航天院所做轨道预报验证时,被一组数据震住了:用经典二体J2摄动模型跑7天轨道,位置误差就突破800米;换成高精度数值积分加30阶地球引力场模型,计…

📰

向日葵CLI实战攻略:用MCP打通自动化排障与标准化操作,TaoToken统一Key接入

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

MiniMax-01技术报告解读(三)预训练:从数据配比到TaoToken统一API的工程复现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

智能数字版权保护系统架构设计:AI应用架构师如何用TaoToken统一Key打通多模型版权识别链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

用 Telegram 远程操控本地 OpenCode:opencode-telegram-bot 实战指南(TaoToken 配置篇)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

GPT-Image 2.5实测:12种玩法让朋友圈素材全包圆

假期第一天,朋友圈里已经开始有人晒定位、晒日出、晒航空公司餐盒了。我本来没打算出门凑热闹,却在电脑前折腾了一整晚GPT-Image 2.5,硬是把假期朋友圈的“素材”提前包圆了。你别说,这版图片生成模型跟之前的工具完全不是一个手感…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬