Python 作用域与参数传递详解
1. 作用域规则概述
在 Python 中,当在程序里使用一个名称时,Python 会在所谓的命名空间(namespace)中创建、修改或查找该名称。命名空间是名称存在的地方,而作用域(scope)则指的是命名空间,即名称在代码中的赋值位置决定了其在代码中的可见范围。
几乎所有与名称相关的操作,包括作用域分类,都发生在赋值时。Python 中的名称在首次赋值时才会出现,并且在使用前必须先赋值。由于名称无需提前声明,Python 会依据名称的赋值位置将其与特定的命名空间关联起来。也就是说,在源代码中赋值名称的位置决定了它所在的命名空间,进而决定了其可见的作用域。
函数除了封装代码外,还为程序增添了额外的命名空间层。默认情况下,函数内部赋值的所有名称都与该函数的命名空间相关联,与其他命名空间无关。这意味着:
- 定义在 def 内部的名称只能被该 def 内的代码访问,甚至无法从函数外部引用这些名称。
- 定义在 def 内部的名称不会与 def 外部的变量冲突,即便在其他地方使用了相同的名称。例如,在某个 def 外部(如另一个 def 或模块文件的顶层)赋值的名称 X 与在该 def 内部赋值的名称 X 是完全不同的变量。
变量的作用域(即其可使用的范围)始终由其在源代码中的赋值位置决定,与函数调用关系无关。若变量在 def
订阅专栏 解锁全文
925



被折叠的 条评论
为什么被折叠?



