嵌套函数、闭包、装饰器、多种装饰和装饰器内多层嵌套函数

嵌套函数

1.外部函数内:定义内部函数并调用内部函数
2.作用域:内部函数不可以直接调用

def outfunc():
    def infunc(): # 定义内部函数
        pass
    infunc() # 调用内部函数
outfunc()

闭包

1.外层函数结束后将被内层函数用到的外出函数变量不会释放,会被内层函数使用
2.外层函数的返回值是内层函数的引用
3.返回值的type类型为dunction类型,说明返回值是一个函数,根据内部函数需不需要传参调用返回值

def outfunc( a ):
    b = 10
    def infunc(c):
        print(a+b) # 内层函数用到外层函数变量
        print(c)
    return infunc # 外层函数的返回值是内层函数的引用,注意不是调用,装饰器不是引用是调用,返回值的type类型为dunction类型

if __name__ == '__main__':
    # 在这里我们调用外函数传入参数5
    # 此时外函数两个临时变量 a是5 b是10 ,并创建了内函数,然后把内函数的引用返回存给了demo
    demo1 = outfunc(5) # 返回值inner赋值给demo,为function类型
    print(type(demo)) # 返回值的type类型为dunction类型说明返回值是一个函数,调用函数给形参c传参
    demo1(1) # demo存了外函数的返回值,也就是inner函数的引用,这里相当于执行inner函数
    demo2 = outfunc(7)
    demo2(2)

调用内部函数,看一看内部函数是不是能使用外部函数的临时变量

执行结果:
在这里插入图片描述

装饰器

import functools
def outfunc(func):
    print(type(func))
    print(11111111111111111111)
    # @functools.wraps(func)
    def infunc():
        print(2222222222222222222222)
        func() # return表示装饰器有返回值
    return infunc
@outfunc
def func():
    print('111111')
# func()
func()
func()
print(func.__name__)

在这里插入图片描述

import functools
def outfunc(func):
    print(type(func))
    print(11111111111111111111)
    @functools.wraps(func)
    def infunc():
        print(2222222222222222222222)
        func() # return表示装饰器有返回值
    return infunc
@outfunc
def func():
    print('111111')
# func()
func()
func()
print(func.__name__)

在这里插入图片描述

def outfunc(func):
    print(type(func))
    # @functools.wraps(func)
    def infunc():
        print(2222222222222222222222)
        return func() # return表示被装饰函数有返回值
    return infunc
@outfunc
def func():
    print('111111111111111111111111')
    return '333333333333333333333333333'

# func()
print(func())
print(func())
print(func.__name__)

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值