函数返回值、变量作用域、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。二、变量作用域三层划分局部作用域L函数内部定义的变量仅当前函数栈帧生效函数调用结束立即销毁全局作用域G函数外部、模块顶层定义的变量整个模块内生效内置作用域BPython内置函数、关键字如print、len全局任意位置生效变量查找规则LEGB局部→外层嵌套→全局→内置由内向外逐层查找找不到直接抛出NameError三、global关键字使用场景与禁区1.只读全局变量无需global函数内部仅读取全局变量不做修改不需要任何关键字直接使用即可2.修改全局变量必须global函数内部想要重新赋值、修改全局不可变变量必须先用global声明否则解释器会判定为新建局部变量出现冲突报错。count 0 def add_count(): global count count 1 add_count() print(count) # 13.禁区可变全局变量无需global全局列表、字典函数内部修改内部元素不需要global因为没有修改变量指向的内存地址只是原地修改数据。四、新手必踩报错局部变量引用前赋值a 10 def test(): print(a) a 20 # 解释器提前识别局部赋值判定a为局部变量读取时报错解决方案读取前使用global声明