Pyhon基础(7)-返回函数和匿名函数

本文介绍了Python中函数作为返回值的应用场景,包括如何定义和使用返回函数,闭包的概念及注意事项,以及匿名函数lambda的基本用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

返回函数

将函数作为返回值返回
作用:比如求和,我们一般将实现写在函数中,然后调用这个函数,但是若我们不需要立即求和,而是在后面的代码中,根据需要再计算
比如:

def s(n):
    print('s')
    def su():
        print('su')
        sum=0
        m=0
        for m in n:
            sum=sum+m
        return sum
    print('end')
    return su

代码执行如下:

>>> f=s([1,2,3,4,5])
s
end
>>> f()
su
15

可以看出,函数首先执行内部函数外的代码,并返回内部函数,当调用时,再执行内部函数。
当有多个返回值呢?

def fun():
    print('fun')
    def fun1():
        print('fun1')
    def fun2():
        print('fun2')
    print('end')
    return fun1,fun2

由前面函数那一节可知,有多个返回值,其实返回的是一个tuple,所以若需要使用函数fun1 则:

>>> f=fun()
fun
end
>>> f[0]()
fun1

闭包

闭包比较复杂,难以理解。返回函数中不要引用任何可能会变化的变量

def fun():
    L=[]
    for m in range(1,4):
        print('fun')
        def sum():
            print('sum')
            return m*m
    return sum

执行结果如下:

>>> f=fun()

fun
fun
fun
>>> f

<function fun.<locals>.sum at 0x000001DA11E71378>
>>> f()

sum
9

可以看出,只有一个返回函数被执行。

def count():
    print('count()')
    def f(j):
        print('f()函数')
        return j*j 
    fs = []
    for i in range(1, 4):
        print('count()的循环')
        fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()
    return fs

执行结果如下:

>>> f=count()

count()
count()的循环
f()函数
count()的循环
f()函数
count()的循环
f()函数
>>> f

[1, 4, 9]

可以看出,得到的是返回的数列,和普通函数一样,实时执行了内部函数,所以为了有所区别,我们使用以下代码:

def count():
    print('count()')
    def f(j):
        print('f()函数')
        def s():
            return j*j
        return s
    fs = []
    for i in range(1, 4):
        print('count()的循环')
        fs.append(f(i)) # f(i)立刻被执行,因此i的当前值被传入f()
    return fs

执行结果如下:

>>> f=count()

count()
count()的循环
f()函数
count()的循环
f()函数
count()的循环
f()函数
>>> f

[<function count.<locals>.f.<locals>.s at 0x00000287E29116A8>, <function count.<locals>.f.<locals>.s at 0x00000287E2911730>, <function count.<locals>.f.<locals>.s at 0x00000287E29117B8>]
>>> f[0]()

1
>>> f[1]()

4

可以看到,在调用函数之前,并没有执行s()函数的代码,而是一个返回元素都是函数地址的list,然后调用每个元素,才执行s()函数。

匿名函数lambda

lambda x:表达式

关键字lambda表示匿名函数,冒号前面的x表示函数参数,匿名函数只能有一个表达式,不用写return ,返回值就是该表达式的结果

  1. 将匿名函数赋给变量
>>> a=lambda x : x*x       
>>> a(10)      
100
  1. 将匿名函数作为返回值
def f(x, y):
    return lambda: x * x + y * y

执行如下:

f(10,20)

<function f.<locals>.<lambda> at 0x00000287E29111E0>
>>> f(10,20)()     
30

所以,返回值是一个无参数的匿名函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值