前言
在Python编程中,函数是我们接触较多的知识点,毕竟函数是用来节省代码量和提高程序效率很重要的一个手段。
首先,我们回顾下Python定义和使用函数的写法。
def sum(a,b):
all = a + b
return all
sum(1,2)
其中:
def是关键字,是函数的声明;
sum是函数名称,当然实际取名中,尽量取实际含义的名称,这样有利于代码的维护,也便于使用者的阅读;
括号里的a和b是函数的参数;
中间缩进的代码块就是函数的主体部分,是可执行的Python语句,用于实现一些功能,这里的功能就是求两个数之和;
函数最后,可以返回结果(return和yield),也可以不返回;
最后,使用函数名称,并传入相应的参数值,就可以调用函数了。
全局变量与局部变量
这两个名称解释起来还是很简单的,我们把函数外的变量叫做全局变量,而函数里面定义的变量则称为局部变量。
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
对于嵌套函数,内部函数要使用外部函数定义的变量,就需要用nonlocal这个关键字。
def outer():
num = 10
def inner():
nonlocal num
num = 100
print('inner',num)
inner()
print('outer',num)
outer()
# inner 100
# outer 100
总结
函数外的变量为全局变量,函数内的为局部变量,并且函数调用完局部变量会被释放;
global关键字用来在函数或其他局部作用域中使用全局变量;-nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量。
推荐阅读
···END···
扫二维码关注
转载:https://blog.csdn.net/luoluopan/article/details/102381698