Python函数为何能访问未在参数中定义的变量?是否为全局行为?
问题解答
这是完全正常的行为。
关于Python变量作用域的说明:
- 你给出的代码中,
a=1是定义在全局作用域的变量,函数func内部只是读取a的值,没有对它进行赋值操作。按照Python的作用域规则,当函数内部引用一个未在局部定义的变量时,会向上查找外层作用域,这里就找到了全局的a,所以执行func()会返回1。 - 变量并不是默认具有全局特性:
- 如果在函数内部直接给变量赋值,这个变量会被视为函数的局部变量,和全局变量无关。比如:
a=1 def func(): a = 2 return a func() # 返回2,全局的a仍然是1- 要是想在函数内部修改全局变量,必须用
global关键字声明这个变量来自全局作用域:
a=1 def func(): global a a = 2 return a func() # 返回2,全局的a被修改为2
内容的提问来源于stack exchange,提问作者dani
相关产品推荐
相关产品推荐

