前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python进阶——通用装饰器的使用

Python进阶——通用装饰器的使用

原创
作者头像
落雨
发布2022-03-08 10:45:34
29.1K0
发布2022-03-08 10:45:34
举报
文章被收录于专栏:落雨的专栏

1. 装饰带有参数的函数

代码语言:javascript
复制
# 添加输出日志的功能
def logging(fn):
    def inner(num1, num2):
        print("--正在努力计算--")
        fn(num1, num2)

    return inner


# 使用装饰器装饰函数
@logging
def sum_num(a, b):
    result = a + b
    print(result)


sum_num(1, 2)

运行结果:

代码语言:javascript
复制
--正在努力计算--
3

2. 装饰带有返回值的函数

代码语言:javascript
复制
# 添加输出日志的功能
def logging(fn):
    def inner(num1, num2):
        print("--正在努力计算--")
        result = fn(num1, num2)
        return result
    return inner


# 使用装饰器装饰函数
@logging
def sum_num(a, b):
    result = a + b
    return result


result = sum_num(1, 2)
print(result)

运行结果:

代码语言:javascript
复制
--正在努力计算--
3

3. 装饰带有不定长参数的函数

代码语言:javascript
复制
# 添加输出日志的功能
def logging(fn):
    def inner(*args, **kwargs):
        print("--正在努力计算--")
        fn(*args, **kwargs)

    return inner


# 使用语法糖装饰函数
@logging
def sum_num(*args, **kwargs):
    result = 0
    for value in args:
        result += value

    for value in kwargs.values():
        result += value

    print(result)

sum_num(1, 2, a=10)

运行结果:

代码语言:javascript
复制
--正在努力计算--
13

4. 通用装饰器

代码语言:javascript
复制
# 添加输出日志的功能
def logging(fn):
    def inner(*args, **kwargs):
        print("--正在努力计算--")
        result = fn(*args, **kwargs)
        return result

    return inner


# 使用语法糖装饰函数
@logging
def sum_num(*args, **kwargs):
    result = 0
    for value in args:
        result += value

    for value in kwargs.values():
        result += value

    return result


@logging
def subtraction(a, b):
    result = a - b
    print(result)

result = sum_num(1, 2, a=10)
print(result)

subtraction(4, 2)

运行结果:

代码语言:javascript
复制
--正在努力计算--
13
--正在努力计算--
2

5. 小结

  • 通用装饰器的语法格式: # 通用装饰器 def logging(fn): def inner(*args, **kwargs): print("--正在努力计算--") result = fn(*args, **kwargs) return result return inner

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 装饰带有参数的函数
  • 2. 装饰带有返回值的函数
  • 3. 装饰带有不定长参数的函数
  • 4. 通用装饰器
  • 5. 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档