Python函数如何访问内部未定义的变量?示例中全局变量访问疑问
问题解答
没错,teste()能访问到a和b就是因为它们是全局变量。
Python的变量作用域遵循LEGB规则:
- L(Local):当前函数内部的局部作用域
- E(Enclosing):嵌套函数的外层作用域
- G(Global):模块级别的全局作用域
- B(Built-in):Python内置的变量/函数
你的代码里,teste()函数内部只是读取a和b的值,没有对它们进行赋值操作。这时候Python会依次向上查找变量:先看函数内部有没有定义,没有就找外层作用域,最后找到全局作用域里定义的a=5和b=4,所以能正常打印出这两个值。
如果要在函数内部修改全局变量,就得用global关键字声明,比如:
def teste(): global a a = 10 print(a, b) a = 5 b = 4 teste() # Outputs '10 4'
要是不用global直接赋值,Python会把a当成函数内部的局部变量,这时候如果在赋值前读取就会报错。
内容的提问来源于stack exchange,提问作者Ricardo
相关产品推荐
相关产品推荐

