Python中的嵌套函数

嵌套函数的定义:
如果在一个函数的内部还定义了另一个函数(注意: 是定义,不是引用!),这个函数就叫嵌套函数。外部的我们叫它外函数,内部的我们叫他内函数。
*

1、最简单的嵌套函数(不带有参数)

def outer_func():
    x=1
    def inner_func():
        result=x+1
        print(result)
    return inner_func
f1=outer_func()#获得的只是返回的inner_func()的引用,是一个地址。并没有执行返回的引用
print(f1)#引用的输出为一个地址。

输出结果:

<function outer_func.<locals>.inner_func at 0x000001C9DEDDA2F0>

改写:

def outer_func():
    x=1
    def inner_func():
        result=x+1
        print(result)
    return inner_func
f1=outer_func()
f1()#得到Iner_func的引用后,并执行了该函数。

输出如下:

2

2、带有参数的嵌套函数

(1)外函数带有参数

def outer_func(x):
    def inner_func():
        print(x+1)
    return inner_func

f1 = outer_func(1) # 返回inner函数对象
print(f1)

输出结果如下:

<function outer_func.<locals>.inner_func at 0x000001C9DEE6BD90>

执行返回的内参数的引用:

def outer_func(x):
    def inner_func():
        print(x+1)
    return inner_func

f1 = outer_func(1) # 返回inner函数对象
f1()

输出结果:

2

(2)内函数带有参数

def outer_func():
    def inner_func(x):
        print(x+1)
    return inner_func

f1 = outer_func() # 返回inner函数对象
print(f1)

输出结果如下:

<function outer_func.<locals>.inner_func at 0x000001C9DEE6BF28>

执行返回的内函数的引用:注意加上内函数的参数!

def outer_func():
    def inner_func(x):
        print(x+1)
    return inner_func

f1 = outer_func() # 返回inner函数对象
f1(10)

执行结果如下:

11

(3)内外函数都含有参数

def outer_func(x):
    def inner_func(y):
        print(x+y)
    return inner_func

f1 = outer_func(1) # 返回inner函数对象,必须加入外函数参数。
print(f1)#打印的是inner_func(y)的引用(地址)。

输出结果如下:

<function outer_func.<locals>.inner_func at 0x000001C9DEDDA488>

调用内函数额引用:

def outer_func(x):
    def inner_func(y):
        print(x+y)
    return inner_func

f1 = outer_func(1) # 返回inner函数对象
f1(20)

输出结果如下:

21

进一步扩展:
当我们将外函数的变量x换成被装饰函数对象(func),内函数的变量y换成被装饰函数的参数,我们就可以得到一个通用的装饰器:

def decorator(func):
    def inner(*args, **kwargs):
        add_other_actions()
        return func(*args, **kwargs)
    return inner
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值