python从零开始--21 装饰器

装饰器:本质是一个Python函数,它的功能是让其它函数在不需要做任何代码变动的情况下,额外增加功能。

这篇文章写的很好,我将链接地址放这里:https://blog.csdn.net/xiangxianghehe/article/details/77170585


小白如何一步步写一个简单的装饰器: 

step1. 装饰器需要将需要装饰的函数作为入参,下面例子中的func就代表被装饰的函数。所以第一步就是定义一个装饰器函数,其参数为func。

 def  deco(func):


step2:第二步是定一个返回函数,该函数用来包装func,即一个包括了func功能,然后同时加入了扩展代码的返回函数。

 def deco(func):

         def wrapper():

         return wrapper


step3: 第三步,在wrapper()函数中将func()包括进来,鉴于func()可能有各种参数,为了能匹配各种参数,用(*args, **kwargs)作为其参数。

 def deco(func):

         def wrapper(*args, **kwargs):

                     func(*args, **kwargs)

         return wrapper


step4: 在wrapper中加入扩展的代码

 def deco(func):

         def wrapper(*args, **kwargs):

      xxxxxx #func运行前执行的代码

                     func(*args, **kwargs)

      xxxxxx #func运行后执行的代码

         return wrapper


step 5: 使用

@ deco

funcaaa()


@deco

funcbbb(ss, dd, *tuple1, **key1)


import time

def deco_time(func):

    def wrapper(*args, **kwargs):
        begin_time = time.time()
        func(*args, **kwargs)
        end_time = time.time()
        process_time = (end_time - begin_time) * 1000
        print("{}执行时间为{}毫秒。".format(func.__name__, process_time))

    return wrapper

@deco_time
def sleep_1sec_func(str_for_print):
    print(str_for_print)
    time.sleep(1)

@deco_time
def sleep_2sec_func():
    time.sleep(2)

s1 = "使用等待1秒"
sleep_1sec_func(s1)

sleep_2sec_func()
使用等待1秒
sleep_1sec_func执行时间为1000.0572204589844毫秒。
sleep_2sec_func执行时间为2000.1144409179688毫秒。

写一个带参数的装饰器:

有些情况装饰器需要带参数,以获取更高的灵活度,具体的写法步骤如下:

step1. 装饰器需要将需要装饰的函数作为入参,下面例子中的func就代表被装饰的函数。所以第一步就是定义一个装饰器函数,其参数为func。

 def  deco(func):


step2:第二步是定一个返回函数,该函数用来包装func,即一个包括了func功能,然后同时加入了扩展代码的返回函数。

 def deco(func):

         def wrapper():

         return wrapper


step3: 第三步,在wrapper()函数中将func()包括进来,鉴于func()可能有各种参数,为了能匹配各种参数,用(*args, **kwargs)作为其参数。

 def deco(func):

         def wrapper(*args, **kwargs):

                     func(*args, **kwargs)

         return wrapper

step4: 加上带参数的函数

def add_para_deco(para):        # para为参数

 def deco(func):

         def wrapper(*args, **kwargs):

                     func(*args, **kwargs)

         return wrapper

 return deco   #注意要加返回函数deco


step5 在wrapper中加入基于参数的扩展的代码,例如

def add_para_deco(para):        # para为参数

 def deco(func):

         def wrapper(*args, **kwargs):

      if para = "xxx": 

                                yyyyyyyy

                      else: 

                                 kkkkkkk

                     func(*args, **kwargs)

         return wrapper

 return deco   #注意要加返回函数deco


step 6: 使用

@add_para_deco("xxx")

 def sleep_1sec_func(xxxx):

           xxxxxx


import time


def log_time(timing):
    def deco_time(func):
        def wrapper(*args, **kwargs):
            begin_time = time.asctime(time.localtime(time.time()))
            func(*args, **kwargs)
            end_time = time.asctime(time.localtime(time.time()))
            if timing == "begin":
                print("{}开始执行的时间为{}".format(func.__name__,begin_time))
            elif timing == "end":
                print("{}结束执行的时间为{}".format(func.__name__,end_time))
            else:
                print("对{}装饰logtime时输入的参数错误".format(func.__name__))
        return wrapper
    return deco_time


@log_time("end")
def sleep_1sec_func(str_for_print):
    print(str_for_print)
    time.sleep(1)


@log_time("begin")
def sleep_2sec_func():
    time.sleep(2)


if __name__ == "__main__":
    s1 = "使用等待1秒"
    sleep_1sec_func(s1)
    sleep_2sec_func()


Python是一种高级、解释型、通用型的编程语言,以其简洁易读的语法和丰富的库而受到广泛欢迎。如果你想从零开始学习Python,以下是一个基础的教程大纲: 1. **安装Python**:首先,你需要在你的计算机上安装Python。访问官网(https://www.python.org/downloads/)下载适合你操作系统的版本。 2. **学习基本语法**: - 变量与数据类型:Python使用缩进来表示代码块,了解字符串、数字(整数和浮点数)、列表、元组和字典等基本数据类型。 - 基本运算符:包括算术运算、比较运算和逻辑运算。 - 控制流:条件语句(if-else),循环(for和while)。 3. **函数**:函数是可重复使用的代码块,理解如何定义、调用和参数传递。 - 函数定义(def)与返回值。 4. **模块和包**:Python的标准库提供了许多功能模块,如os、math和datetime等。你还需要学会如何导入和使用它们。 5. **面向对象编程**: - 类和对象:定义类,创建对象,并理解封装、继承和多态的概念。 - 特性与方法:属性(变量)和方法(函数)的关系。 6. **Python标准库**:熟悉常用的标准库,如文件操作(io)、网络编程(socket)和异常处理(try-except)。 7. **Python IDE与文本编辑器**:选择一个适合自己的集成开发环境(IDE),如PyCharm、VS Code或Jupyter Notebook。 8. **练习与项目**:通过实际编写小程序,比如计算器、猜数字游戏等,提升编程能力。 9. **学习高级主题**:当你对基础部分有了一定掌握后,可以探索更高级的主题,如装饰器、生成器、迭代器和装饰器等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值