在Python编程中,函数是我们接触较多的知识点,毕竟函数是用来节省代码量和提高程序效率很重要的一个手段。
首先,我们回顾下Python定义和使用函数的写法。
def sum(a,b):
all = a + b
return all
sum(1,2)
其中:
这两个名称解释起来还是很简单的,我们把函数外的变量叫做全局变量,而函数里面定义的变量则称为局部变量。
i = 1 #全局变量
def fun():
j = 2 #局部变量
第一种情况: 函数里面使用全局变量,这个是没有问题的。
i = 1
def fun():
print(i)
fun()
# 1
第二种情况: 在函数中修改全局变量,这种是会报UnboundLocalErro的错。原因是因为Python默认函数内部为局部变量,由于局部变量i没有声明,所以没法进行操作。
i = 1
def fun():
i += 1
print(i)
fun()
# UnboundLocalError: local variable 'i' referenced before assignment
这种情况下我们要使用global关键字,要进行声明i这个变量就是之前定义的全局变量i。
i = 1
def fun():
global i
i += 1
print(i)
fun()
# 2
第三种情况: 局部变量和全局变量重名,我们来看看有什么有趣的事情会发生:
i = 1
def fun():
i = 2
print(i)
fun()
print(i)
#2
#1
有趣的事情发生了,从结果来看,当局部变量和全局变量重名,函数内部局部变量会将全局变量覆盖,而局部变量当函数调用完就被释放掉了,所以最后i的值还是全局变量i的值。
对于嵌套函数,内部函数要使用外部函数定义的变量,就需要用nonlocal这个关键字。
def outer():
num = 10
def inner():
nonlocal num
num = 100
print('inner',num)
inner()
print('outer',num)
outer()
# inner 100
# outer 100