python提高篇之函数4-返回值和闭包

上节课我们讲解了函数的作用域问题,相信小伙伴们已经掌握了上节课的知识。本节课继续来学习函数的相关知识。

返回值 return

通过上节课内容我们知道函数其实是一个封闭的空间,函数内的变量和外部并不相通。那么我们想要把一些数据传到函数外面就需要用到返回值这样的关键字—return

return英语单词有返回的意思,学习语言先看单词就知道什么意思了。我们代码就很好理解了。

#无返回值函数
def func_sum(x,y):
    num = x + y
print(func_sum(1,2))
# 打印输出None

#有返回值函数
def func_sum(x,y):
    num = x + y
    return num
print(func_sum(1,2))
#打印输出3

上面的例子我们看到,没有返回值的函数num是无法传出函数的,而有返回值的函数可以将num传出函数,同时也可以将这个值赋值给变量。这是return在函数中的作用。

其实,return还有一个作用就是停止的作用,程序遇到return关键字就会停止后面的程序,这个和循环中的break很像。我们继续看例子。

def func_sum(x,y):
    num = x + y
    return num
    print('return后执行的句子')

print(func_sum(1,2))

#打印输出3  

上面的例子中我们可以看到return关键字之后的**print()**函数并没有打印出来。

闭包

有小伙伴问了,什么闭包它有什么用?

闭包简单来说就是函数嵌套函数,函数内返回一个函数,它的作用就是可以保存内部函数的数据,闭包其实是python装饰器基础,或者说是装饰器的前身。

说了这么多概念相信大部分人都蒙了,我们直接看下面的例子。通过例子讲解就会清楚很多。

def one(x):
    def two(y):
        return x+y
    return two

aa = one(1)
print(type(aa))
print(aa(2))

# <class 'function'>
# 3

我们上面代码,函数嵌套函数是我们一次见到这种结构,这种结构是一种闭包。我们看one函数,它返回的是two函数,而two函数返回的是x+y。

我们再看aa = one(1),这个是调用one函数,它返回的果然是一个函数。这个函数就是two函数。我们再看aa(2)。其实这个可以理解为two(2),这个函数执行的是x+y,计算机在执行one函数时将x的值存起来,在调用two函数时将x和y相加,这就是为什么会返回3的原因。这个过程就是闭包程序运行过程。相信聪明的你是可以理解的。

闭包的变量问题

闭包有多个函数嵌套,加入它们的变量有重名的情况,最终的变量结果会不会被改变呢。还是看一个例子深入了解一下。

def one():
    x = 0
    def two():
        x = 2
        print('two函数重新赋值x',x)
    print('修改前打印第一次x',x)
    two()
    print('修改后打印第一次x',x)

one()

#修改前打印第一次x 0
#two函数重新赋值x 2
#修改后打印第一次x 0

上面的代码中,我们发现尽管two函数对x进行了重新赋值,但是one函数中的x变量值最后并没有改变,这个是闭包的函数特点。这个特点可以保证闭包中的变量都有自己小世界,外部并不会做干扰。下节课更精彩记得来啊。

码字不易,欢迎大家在评论区留言,收藏。或者加入群聊一起进步学习。