当前位置: 首页 > news >正文

函数返回值、变量作用域、global关键字深度拆解

博客导语

局部变量修改全局变量、函数多返回值、return与exit区别是新手高频报错点。本篇结合内存栈帧讲解变量查找规则,区分global/nonlocal使用边界,补齐函数返回值底层内存逻辑。


一、函数返回值全用法

1.单返回值与多返回值

Python原生支持多返回值,底层自动打包为元组,接收时可解包。无return语句时,默认返回None。

def get_pos(): return 100,200 # 底层等价于return (100,200) x,y = get_pos() # 自动解包接收

2.return核心特性

执行return后,会立即终止当前函数,后续代码永远不执行;return可以单独空写,直接终止函数,返回None。


二、变量作用域三层划分

  1. 局部作用域(L):函数内部定义的变量,仅当前函数栈帧生效,函数调用结束立即销毁

  2. 全局作用域(G):函数外部、模块顶层定义的变量,整个模块内生效

  3. 内置作用域(B):Python内置函数、关键字,如print、len,全局任意位置生效

变量查找规则(LEGB)

局部→外层嵌套→全局→内置,由内向外逐层查找,找不到直接抛出NameError


三、global关键字使用场景与禁区

1.只读全局变量(无需global)

函数内部仅读取全局变量,不做修改,不需要任何关键字,直接使用即可

2.修改全局变量(必须global)

函数内部想要重新赋值、修改全局不可变变量,必须先用global声明,否则解释器会判定为新建局部变量,出现冲突报错。

count = 0 def add_count(): global count count += 1 add_count() print(count) # 1

3.禁区:可变全局变量无需global

全局列表、字典,函数内部修改内部元素,不需要global,因为没有修改变量指向的内存地址,只是原地修改数据。


四、新手必踩报错:局部变量引用前赋值

a = 10 def test(): print(a) a = 20 # 解释器提前识别局部赋值,判定a为局部变量,读取时报错

解决方案:读取前使用global声明

http://www.rkmt.cn/news/1526402.html

相关文章:

  • 相框厂主要分布在哪里?主要产区横向对比
  • 从GPT-1到GPT-4o:一个普通开发者眼中的模型进化与实战选择指南
  • 北京莫瑶教育零基础转行AI工程师(按学习难度分级)|2026就业向全程学习指南 - 教育信息网
  • 如何快速掌握AlienFX控制:开源工具终极指南解锁Alienware设备完全掌控
  • 数据开发半年工作后随感
  • 探索fSpy:解锁静态图像相机匹配的终极指南
  • 饮料厂主要分布在哪里?各产区有什么不同?
  • 3步破解默认密码困局:用Changeme防御企业安全最薄弱环节
  • 如何让旧款Mac免费升级最新macOS?OCLP-Mod完整指南
  • 089、Pre-commit Hooks 与 Claude Code:提交前自动检查、修复与拦截
  • 2026中山中央空调回收品牌价差格力约克大金各值多少 - 广东再生资源回收
  • 2026制药工业吸尘器TOP3品牌评价与推荐 - 工业清洁测评社
  • 如何永久保存你的微信记忆?WeChatMsg让聊天记录成为珍贵数字资产
  • 跨源查询 30 倍提速:衡石 BI 多源异构数据关联技术深度解析
  • 成都钢材供应有限公司|热轧型钢|热轧钢板|热轧钢管|热轧钢筋 - 四川盛世钢联营销中心
  • 影刀RPA新手教程_财务对账自动化银行流水企业账单与Excel差异比对
  • 【CANdelaStudio-从入门到深入到实战】11 例程控制:让ECU学会“边干活边聊天”
  • 一个搬家公司的技术账:我们在广州跑了3200单,攒下这些数据 - 奔跑123
  • 088、GitLab CI 集成:Merge Request 的自动代码审查、建议生成与流水线集成
  • OpenGL透视投影实战:用glFrustum和gluLookAt在头歌平台搞定立方体三点透视
  • MPC8280 SIU与中断控制器配置实战:从原理到稳定系统构建
  • 【CANdelaStudio-从入门到深入到实战】12 安全访问(Security Access)——种子-密钥机制的工程实现
  • Python 高手编程系列三百三十六 :命名和使用
  • ISODATA vs K-Means:在ENVI CLASSIC里实战对比,到底该选哪个算法?
  • 2026免费音频转FLAC在线保姆级教程!无限制工具手把手教学,免费获得无损音乐格式 - 时时资讯
  • 从内存困境到流畅体验:PCL2启动器的智能资源管理革命
  • 心电图特征点检测系统Matlab程序含GUI2(设计源文件+万字报告+讲解)(支持资料、图片参考_降重降ai)
  • 牛客网Java面试题汇总(2026秋招最新版,附答案,持续更新)
  • 终极AI换脸指南:3步实现专业级深度伪造,无需训练!
  • 2026这6款宝藏降AI率网站全网首测,一键让AIGC率断崖式下跌!