python装饰器有感

这块涉及到了闭包、LEGB作用域的问题,我能写能用,但实在表达力不够好,就分享下我自己的学习经历和初步学成后手写的自定义装饰器吧。

初次学习:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
初步学成后,写的自定义装饰器:

# coding=utf-8
# encoding: utf-8
"""
Author:刘源
Createtime:2021/07/31 22:43:36
Updatetime:2021/07/31 22:43:36
Description:
"""
import time, threading, os, pathlib, multiprocessing, sys, codecs, re, functools, sys

file1 = open('LinuxPython5W2H-11.txt', 'a')
file1.write(f'{__file__}运行记录')
file1.write(time.ctime())
file1.write('---' + str(time.time()) + '\n')
file1.close()

# 手写闭包装饰器(ps:变量作用4大范围-LEGB规则-Local,Enclosing,Global,Built_in)
def timer(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f'函数耗时{end - start}s')
        return result
    return wrapper

@timer
def sleep3(x):
    time.sleep(3)
    return x ** 3

print('1------', sleep3(4))


# 手写高级闭包装饰器-闭包嵌套更多的函数
def timer_author(author):
    def timer(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            start = time.time()
            result = func(*args, **kwargs)
            end = time.time()
            print(f'高级闭包装饰器记录的耗时是{end - start}s,且设置者是{author}')
            return result
        return wrapper
    return timer

@timer_author('刘源')
def sleep2():
    time.sleep(2)
    return '2秒'

@timer_author('李昊')
def sleep4():
    time.sleep(4)
    return '4秒'

print('2------', sleep2())
print('3------', sleep4())

效果:
在这里插入图片描述
3个特殊装饰器:
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天道哥哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值