小言_互联网的博客

Python进阶|函数变量作用域

242人阅读  评论(0)

前言

在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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场