1、基本概念
作用域(Scope)是在程序组定义变量或函数时,这些变量或函数可被访问的范围。在不同的作用域中,变量和函数的可见性和访问性是不同的。
当访问一个变量时,Python会按照LEGB的顺序进行查找,知道找到第一个匹配的变量,然后停止查找。如果在所有作用域中都找不到变量的定义,就会引发NameError
- L(Local):局部作用域。包括函数内部定义的变量和参数。在函数内部先进行变量查找
- E(Enclosing):嵌套函数的父函数作用域。如果在当前函数内部找不到变量,就会向上一层嵌套的函数中查找。
- G(Global):全局作用句。在模块层次定义的变量,对于整个模块都是可见的。
- B(Built-in):内置作用域。包括Python的内置函数和异常。
2、作用域说明
结果演示:

当内部函数的x = 100注释后,结果为

当只注释外部函数的x = 10后,结果为:

由此可得知,函数内变量的取值,是自己局部作用域为最先,其次是外一层的变量,而它不会取自己内一层的变量值。
注意:在项目中会有很多的函数,函数涉及到的变量,非特殊情况下变量务必配置为局部变量作用域,否则极易造成全局变量污染。
3、global和nonlocal关键字
- global:全局声明
在函数内通过global声明变量的方式,改变某个全局变量的值

- nonlocal:非本地局部声明,一般在嵌套函数中使用
本地有某个变量,会将外一层该变量的值变为本的的值

此方法只影响向外1层的变量

若非嵌套函数使用,会报错,此处应使用global方式

1024

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



