Python--函数的嵌套和闭包

本文深入探讨了Python中函数的嵌套调用及闭包的概念,解析了闭包如何引用外部函数的局部变量,并通过实例展示了正确的闭包使用方式。

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

函数的嵌套情况会很绕,一定要看清楚,是变量、方法名、还是参数等。

"""
一定要清楚python的函数执行顺序,题目如下,运行结果会是什么:
"""
# def function1():
#     num = 1
#     def function2():
#         num  = 2
#         print(num)
#     print(num)
#     function2()
#     print(num)
# function1()

下面返回了一个方法名,尤其要注意这种情况。

注:内部函数调用外部函数的变量(非全局变量),则称内部函数为闭包

       调用一个函数,返回来另一个新的函数,返回的函数叫做闭包

"""
这种情况下,要理清函数返回的到底是什么
"""
def outer(num1):
    def inner(num2):
        return num1+num2
    return  inner #此处返回的inner  是一个函数名,注意不是字符串。而且还并没有调用
res = outer(20)
result = res(10)#到这一步的时候,res的值就是inner,所以 res(10) = inner(10)
print(result) #最后打印的结果就是30 
#以上的调用方式还有更简单的写法:
print(outer(20)(10))#就是在已经调用的基础上,继续调用inner函数,结果就是30

注:闭包函数引用外部函数局部变量的前提是,内部函数不能和外部函数的变量重名。

def outer(a):
    def inner():
        a = a+1 #此处的a虽然是引用的外部变量,且下面的return也可以看出是闭包函数,但是,a = 是重                        
                #新定义了一个新的变量,与外部函数的参数重名。不能这样使用
        return a
    return inner
#再去调用inner函数的时候,控制台会报错。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值