n=10 #全局变量
def func ():
print(n)
func()
>>>10
n=10 #全局变量
def func ():
n=n+2 #局部变量
print(n)
func()
发生异常:
UnboundLocalError local variable ‘n’ referenced before assignment 意思是局部变量n在使用前没有定义
原因:
函数内的n与全局变量同名,并且将其写在了赋值语句的左边,也就是等号的左边,这时的n就会是一个局部变量,在定义之前就调用,当然会出现没有定义的异常错误了
修正:可以使用关键字global
n=10
def func ():
global n
n=n+2
print(n)
func()
>>>12
ls = [1,2,3]
def func ():
ls.append(4)
print(ls)
func()
>>>[1,2,3,4]
咦?为什么这里在函数内部没有定义列表(定义列表需要有[],才算算定义了一个列表)就可以调用呢?
原因:在执行*ls.append(4)*的之前需要创建一个ls的列表,但是在函数的作用域中没有以ls命名的列表,此时的func函数会到全局内存空间去寻找是否存在ls的变量,找到后会自动关联,并修改其内容。
底层原因:组合数据类型使用的是指针,指针是保存内存地址的变量,在函数内部使用指针来修改数据,这个数据就会被改变
ls = [1,2,3] #全局变量
def func ():
ls=[] #局部变量
ls.append(4)
print(ls)
func()
print(ls)
>>>[4]
>>>[1, 2, 3]
在函数内部创建了列表ls,就是一个局部变量,在调用完函数语句之后就会销毁变量,所以最后输出的ls是全局变量