python之全局变量和局部变量
1、在定义的函数内出现的变量是局部变量,在全体程序中使用的变量是全局变量。
区别:
局部变量是函数内部的占位符,在使用关键字def定义的过程中,局部变量仍不存在,只有我们在调用这个函数的过程中才会被产生出来,占据一定的内存空间,在函数被调用完毕后,该局部变量会被程序进行回收,消失掉。局部变量的名字可能和全局变量重名,但这是两个完全不同的变量,从其占据的内存区域,作用的范围等都是完全不同的。
联系:
1、使用保留字global 可以将局部变量升级为全局变量。比如定义如下的函数:
m = 10
def printcoff():
global m
m = 1000
print(m)
printcoff()
print(m)
如果没有global m这个语句,那么在主程序中的m值是不会被printcoff函数修改的,但加上了这个语句,那么m在printcoff里被声明为全局变量,于是可以被修改数值了。
特殊情况:
如果在自定义函数中引用了一个组合数据类型,比如列表,字典。如果该组合数据类型没有在自定义函数内定义,那么该数据类型被视为全局变量,如果在函数内部定义的话,那么该数据类型是局部变量。
原因是:函数的参数传递有两种形式,一种是值传递,一种是引用传递(相当于C语言中的指针即地址传递),他传的是地址,对该地址的内容进行修改那就是对外部的实际数据进行修改,所以如果没有在函数内部定义该数据类型的话,那么修改的就是外部定义的数据,那么实际展现出的就是全局变量的效果。
2、使用规则:
基本数据类型,无论是否重名,局部变量与全局变量不同。
可以使用global保留字在函数内部声明为全局变量。
组合数据类型。
3、lambda函数。
是一种匿名函数,没有名字的函数。定义一种简单的,一行内表达的简单函数。
主要用作一些特定函数或方法的参数。
有一些固定的使用方式,一般情况下使用def形式。
<函数名> = lambda<参数>:<表达式>。
f = lambda x,y:x=y
f(2,3)