ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

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

函数返回值、变量作用域、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声明

返回列表