首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【python 用简单的方式理解python中的闭包和装饰器】

【python 用简单的方式理解python中的闭包和装饰器】

作者头像
flos chen
发布2026-01-23 15:19:24
发布2026-01-23 15:19:24
1000
举报

1、闭包

闭包是指一个函数内嵌套另一个函数,并且这个嵌套的函数引用了外层函数的变量。
闭包的作用是可以访问外层函数的变量,并且在函数内部修改变量的值。
代码语言:javascript
复制
def make_adder(n):
    def adder(x):
        return x + n
    return adder

add_three = make_adder(3)
print(add_three(4))  # 7

2、装饰器

装饰器是一种特殊的函数,它可以用来修改另一个函数的行为。
装饰器的语法如下:
代码语言:javascript
复制
# @装饰器函数
# def 函数名():
#     函数体
装饰器函数的作用是接收被装饰的函数作为参数,并返回一个修改后的函数。
装饰器函数可以做很多事情,比如:
  1. 记录日志 2. 性能测试 3. 事务处理 4. 缓存 5. 权限校验 6. 异常处理 7. 等等
举个例子:
代码语言:javascript
复制
def log(func):
    def wrapper(*args, **kwargs):
        print(f"Calling {func.__name__} with {args}, {kwargs}")
        return func(*args, **kwargs)
    return wrapper

'''
log 是一个装饰器函数,它接受一个函数 func 作为参数。
wrapper 是一个内部函数,它接受任意数量的位置参数 *args 和关键字参数 **kwargs。
在 wrapper 函数中,首先打印一条日志信息,显示正在调用的函数名称和传递的参数。
然后,wrapper 函数调用原始的 func 函数,并将结果返回。
log 函数返回 wrapper 函数。
'''

@log
def add(x, y):
    return x + y

'''
@log 是一个装饰器语法糖,它等价于 add = log(add)。
这意味着 add 函数被 log 装饰器包装,add 现在指向 wrapper 函数。
'''

print(add(2, 3))  # Calling add with (2, 3), {} 5

'''
当你调用 add(2, 3) 时,实际上调用的是 wrapper(2, 3)。
wrapper 函数首先打印日志信息:Calling add with (2, 3), {}。
然后,wrapper 函数调用原始的 add 函数:add(2, 3),并返回结果 5。
最后,print 函数输出结果:5。
'''

3、总结

闭包主要用于封装和保持状态,它允许函数访问外部函数的变量。
装饰器主要用于在不修改原函数代码的情况下,为函数增加额外的功能。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、闭包
  • 2、装饰器
  • 3、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档