简单的给大家一下全局变量和局部变量以及和他们相关的两个语句,之所以讲这个主要还是有些比较容易混淆的地方。
简单的说下概念:
局部变量:定义在函数内部的变量(包含函数参数)
全局变量:定义在函数外部,模块内部的变量
可以对比下图:
上图分别对应的v输出不同,下图局部变量被注释掉,就会找到全局变量进行赋值。
下图注释掉全局变量,不影响局部变量,但是外部不会找到局部变量:会出现Nameerror报错,说‘V’没有定义。
相信上面三张图应该大致理解全局变量和局部变量的引用关系了。
局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,那肯定会报错呀
我是为了举例子才用了相同的局部变量和全局变量名,实际中最好要区别开,因为有的时候,你也许在没有报错的情况下,得到一个完全意外的结果!
Python的4个作用域:
其实作用域的描述网上还是比较全面的,我这里简单说一下理解方面的:
局部作用域(函数内):简称 L
外部嵌套函数作用域 :简称E
函数定义所在模块(文件)的作用域 :简称G
Python内置模块的作用域:简称B
他们的查询规则:
L-->E-->G-->B
我的理解是(当然是目前阶段的便于理解,其实并不准确):L便是上面提到的局部变量,而E则是函数嵌套函数时才存在的上一层的变量区域,G则是全局变量的区域,B则是内置模块的。
global语句:
从字面意思就能看出来是声明变量的作用域的语句,官方定义:申明一个或者多个变量的作用域为模块级的作用域,也称全局变量。
上图可以和第一幅图进行比较会发现,当声明了全局变量之后,很明显可以修改全局变量了。(图中的红色数字为执行顺序,不在程序内)
nonlocal语句:
声明不是局部变量,也不是全局变量。就是在嵌套函数时,声明他是外一层的变量。这个就比较好理解了,定义的上一级
领取专属 10元无门槛券
私享最新 技术干货