闭包和装饰器

本文介绍了闭包的概念及其优点,讨论了闭包可能带来的内存问题,并详细解释了装饰器的功能,包括如何通过装饰器实现日志记录、性能统计等功能。此外,还展示了几个具体的装饰器实现案例。

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

1.简述你对闭包的理解?

  • 内部函数调用外部函数的变量
  • 一个闭包就是你调用了一个函数A,这个函数A返回了一个函数B给你。这个返回的函数B就叫做闭包,

2.描述闭包的优点与注意点?

  • 1>闭包的优点:可以提高代码的可复用性
  • 2>注意点:由于闭包引用了外部函数的局部变量,外部函数的局部变量没有及时释放,消耗内存。

3.什么是装饰器?

  • 定义一个函数,在运行时动态增加功能

4.简述装饰器的功能?

  • 1>引入日志
  • 2>函数执行时间统计
  • 3>执行函数前预备处理
  • 4>执行函数后清理功能
  • 5>权限校验等场景
  • 6>缓存

5.一个函数同时使用两个装饰器,执行顺序是怎么执行的?

  • 紧挨着的装饰器先执行,执行完成,交给外部的装饰器装饰

6.代码书写遵循什么原则?并解释?

  • 1>遵循开放封闭原则
  • 2>开放:扩展开发
  • 封闭:对实现的功能代码块

7.完成一个装饰器,函数无参数

from time import ctime, sleep

def timefun(func):
    def wrapped_func():
        print("%s called at %s" % (func.__name__, ctime()))
        func()
    return wrapped_func

@timefun
def foo():
    print("I am foo")

foo()
sleep(2)
foo()

8.完成一个装饰器,函数有参数

from time import ctime, sleep

def timefun(func):
    def wrapped_func(a, b):
        print("%s called at %s" % (func.__name__, ctime()))
        print(a, b)
        func(a, b)
    return wrapped_func

@timefun
def foo(a, b):
    print(a+b)

foo(3,5)
sleep(2)
foo(2,4)

9.完成一个装饰器,函数有返回值

from time import ctime, sleep

def timefun(func):
    def wrapped_func():
        print("%s called at %s" % (func.__name__, ctime()))
        return func()
    return wrapped_func

@timefun
def foo():
    print("I am foo")

@timefun
def getInfo():
    return '----hahah---'

foo()
sleep(2)
foo()


print(getInfo())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值