变量的作用域是指程序代码能够访问该变量的区域,如果超出该区域,再访问时就会出现错误。在程序中,一般会根据变量的“有效范围”将变量分为“全局变量”和“局部变量”。
1、局部变量
局部变量是指在函数内部定义并使用的变量,它只在函数内部有效。即函数内部的名字只在函数运行时才会创建,在函数运行之前或者运行完毕之后,所有的名字就都不存在了。所以,如果在函数外部使用函数内部定义的变量,就会出现抛出NameError异常。
在一个函数内部定义的变量,在别的函数和函数外部都不能使用。
不同的函数,可以定义相同名字的局部变量,但是各用各的不会产生影响。
为了临时保存数据,需要在函数体中定义变量来进行存储,这就是局部变量的作用。
2、全局变量
什么是全局变量
与局部变量对应,在一个函数外部定义的变量,称为全局变量。不仅在函数外可以访问到,在函数内也可以访问到,既能在一个函数中使用,也能在其他的函数中使用,作用于函数内外。
全局变量定义的顺序
在函数定义和函数调用之后才定义全局变量,如果在该函数定义中访问该全局变量,会出错。在调用期间还不知道这个变量。
全局变量应该在使用它的函数定义或函数调用之前。建议放在函数定义之前。
全局变量和局部变量重名
当局部变量与全局变量重名时,在函数体内对变量进行赋值后,修改的是局部变量,不影响函数体外的变量。
在函数中 ,如果对一个和全局变量名相同的变量进行=value
的时候,默认是定义一个局部变量,只不过这个变量的名字和全局变量的名字相同罢了。
函数找变量,先从函数的内部找(局部变量),如果没有,则在函数外部(全局变量)找。
示例2:
尽管Python
允许全局变量和局部变量重名,但是在实际开发时,不建议这么做,因为这样容易让代码混乱,很难分清哪些是全局变量,哪些是局部变量。
修改全局变量
在函数体内定义,并且使用global
关键字修饰后,该变量也就变为全局变量。在函数体外也可以访问到该变量,并且在函数体内还可以对其进行修改。
可变类型的全局变量
解决方法有二种,一种是声明为全局变量,第二种是定义默认值。
- 在函数中不使用
global
声明全局变量时不能修改全局变量的本质是不能修改全局变量的指向,即不能将全局变量指向新的数据。 - 对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用
global
时无法修改全局变量。 - 对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用
global
时也可修改全局变量。 - 如果是全局变量是列表,字典,在函数定义中可以不加
global
声明直接修改变量名,使用的是全局变量。
阅读以下代码:
3、小结
- 在函数里边定义的变量叫做局部变量,只能在定义它的函数内部使用。
- 在函数外边定义的变量叫做全局变量。
- 全局变量能够在所有的函数中进行访问,也能在函数外进行访问。
- 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的。
- 在函数中修改全局变量,需要使用global进行声明。可变类型的全局变量除外。
4、练一练
将学生名片管理系统升级成函数版。