资讯专栏INFORMATION COLUMN

python 装饰器 part2

sanyang / 2889人阅读

摘要:装饰器传参被装饰的函数带有参数的情况接上一篇,直接上代码函数也就是被装饰的函数的运行时间是装饰器的正确使用,不需要传参装饰器的正确使用,需要传参此时不用再像上面一样赋值,可以直接调用返回值被装饰的函数有返回值在装饰器内部需被装饰函数的调用

python 装饰器 传参
被装饰的函数带有参数的情况

接上一篇,直接上代码

import time
def decorator(func):
    def process(*args, **kwargs):
        start = time.time()
        func(*args, **kwargs)
        end = time.time()
        print("函数func(也就是被装饰的函数)的运行时间是:{}".format(end-start))
    return process

@decorator # python 装饰器的正确使用,不需要传参
def decorated():
    time.sleep()
    print("decorated function")

@decorator # python 装饰器的正确使用,需要传参 
def decorated(key, val):
    time.sleep()
    print("decorated function")

# 此时不用再像上面一样赋值,可以直接调用
decorated()
decorated(key, val)

返回值
被装饰的函数有返回值在装饰器内部需return被装饰函数的调用

代码

import time
def decorator(func):
    def process(*args, **kwargs):
        start = time.time()
        return func(*args, **kwargs)
        # end = time.time()
        # print("函数func(也就是被装饰的函数)的运行时间是:{}".format(end-start))
    return process

@decorator # python 装饰器的正确使用,不需要传参
def decorated():
    time.sleep()
    print("decorated function")
    return "来自不带参数的被装饰函数"

@decorator # python 装饰器的正确使用,需要传参 
def decorated(key, val):
    time.sleep()
    print("decorated function")
    return "来自带有参数的被装饰函数"

# 此时不用再像上面一样赋值,可以直接调用
decorated()
decorated(key, val)
装饰器带参数
@decorator(val="")

需要对装饰期代码再包装一层

代码

import time
def warpper(val_type):
    def decorator(func):
        def process(*args, **kwargs):
            start = time.time()
            return func(*args, **kwargs)
        return process
    return decorator

@decorator(val_type="") # python 装饰器的正确使用,不需要传参
def decorated():
    time.sleep()
    print("decorated function")
    return "来自不带参数的被装饰函数"

@decorator(val_type="") # python 装饰器的正确使用,需要传参 
def decorated(key, val):
    time.sleep()
    print("decorated function")
    return "来自带有参数的被装饰函数"

# 此时不用再像上面一样赋值,可以直接调用
decorated()
decorated(key, val)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/43062.html

相关文章

  • Python】一文弄懂python装饰(附源码例子)

    摘要:装饰器的使用符合了面向对象编程的开放封闭原则。三简单的装饰器基于上面的函数执行时间的需求,我们就手写一个简单的装饰器进行实现。函数体就是要实现装饰器的内容。类装饰器的实现是调用了类里面的函数。类装饰器的写法比我们装饰器函数的写法更加简单。 目录 前言 一、什么是装饰器 二、为什么要用装饰器 ...

    liuchengxu 评论0 收藏0
  • Python装饰vs装饰模式

    摘要:希望引以为戒郑传装饰模式如果你了解,你肯定听过装饰器模式。在面向对象中,装饰模式指动态地给一个对象添加一些额外的职责。就增加一些功能来说,装饰模式比生成子类更为灵活。 漫谈 如果作为一个Python入门,不了解Python装饰器也没什么,但是如果作为一个中级Python开发人员,如果再不对python装饰器熟稔于心的话,那么可能并没有量变积累到质变。 我以前也看过很多讲python 装...

    stackvoid 评论0 收藏0
  • Python: 会打扮的装饰

    摘要:一般情况下,我们使用装饰器提供的语法糖,来简化上面的写法像上面的情况,可以动态修改函数或类功能的函数就是装饰器。本文标题为会打扮的装饰器本文链接为参考资料修饰器的函数式编程中的装饰器介绍思诚之道装饰器入门与提高赖明星 装饰器 我们知道,在 Python 中,我们可以像使用变量一样使用函数: 函数可以被赋值给其他变量 函数可以被删除 可以在函数里面再定义函数 函数可以作为参数传递给另外...

    blastz 评论0 收藏0
  • Python装饰

    摘要:一引用书流畅的书二基本概念问题装饰器是什么解答严格来说,装饰器只是语法糖,装饰器是可调用的对象,可以像常规的可调用对象那样调用,特殊的地方是装饰器的参数是一个函数问题装饰器有什么特性解答装饰器有个特性,一是可以把被装饰的函数替换成其他函数, 一, 引用 [书] 流畅的Python [书] Effective Python 二, 基本概念 showImg(https://segme...

    aisuhua 评论0 收藏0
  • Python学习之路26-函数装饰和闭包

    摘要:初步认识装饰器函数装饰器用于在源代码中标记函数,以某种方式增强函数的行为。函数装饰器在导入模块时立即执行,而被装饰的函数只在明确调用时运行。只有涉及嵌套函数时才有闭包问题。如果想保留函数原本的属性,可以使用标准库中的装饰器。 《流畅的Python》笔记本篇将从最简单的装饰器开始,逐渐深入到闭包的概念,然后实现参数化装饰器,最后介绍标准库中常用的装饰器。 1. 初步认识装饰器 函数装饰...

    sunny5541 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<