python函数装饰器

2023-10-30

一、简单了解装饰器

装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。
通俗的讲:就是把一个函数当作参数,返回一个替代版的函数
本质上就是一个返回函数的函数
作用:在不改变原函数的基础上,给函数增加功能
(1)在没有使用装饰器的情况
在这里插入图片描述
当我们想要添加内容时:在这里插入图片描述
(2)一个简单的装饰器

在这里插入图片描述
在这里插入图片描述
这正是 python 中装饰器做的事情!它们封装一个函数,并且用这样或者那样的方式来修改它的行为。现在你也许疑惑,我们在代码里并没有使用 @ 符号?那只是一个简短的方式来生成一个被装饰的函数。这里是我们如何使用 @ 来运行之前的代码:
在这里插入图片描述

装饰器练习:
在这里插入图片描述

二、装饰器练习

练习一:
装饰器实现一个函数计时器
1.被装饰的函数如果有 返回值的时候 怎么办?
2.如何保留被装饰函数的函数名字和帮助文档信息?

import functools
import random
import string
import time
li = [random.choice(string.ascii_letters) for i in range(100)]

def timeit(fun):
    #@functools.wraps(fun)
    def wrapper(*args,**kwargs):# 接收可变参数和关键字参数
        """这是一个装饰器timeit"""
        # 在函数执行之前
        start_time = time.time()
        # 执行函数
        res = fun(*args,**kwargs)
        # 在函数执行之后
        stop_time = time.time()
        print('运行事件为:%.6f' %(stop_time-start_time))
        return res
    return wrapper
# @timeit
# def con_add():
#     s = ''
#     for i in li:
#         s += (i + '')
#     print(s)
# @timeit
# def join_add():
#     print(','.join(li))
#
# con_add()
# join_add()


@timeit
def fun_list(n):
    """这是fun_list函数"""
    return [2 * i for i in range(n)]
@timeit
def fun_map(n):
    """这是fun_map函数 被装饰器timeis装饰"""
    return list(map(lambda x:x*2,range(n)))
# fun_list(10000)
# fun_map(10000)

print(fun_list.__name__)
print(fun_list.__doc__)

print(fun_map.__name__)
print(fun_map.__doc__)

练习二:
创建装饰器, 要求如下:
1. 创建add_log装饰器, 被装饰的函数打印日志信息;
2. 日志格式为: [字符串时间] 函数

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python函数装饰器 的相关文章

随机推荐

  • 华为OD机试 - 拼接URL(Java)

    题目描述 给定一个url前缀和url后缀 通过 分割 需要将其连接为一个完整的url 如果前缀结尾和后缀开头都没有 需要自动补上 连接符 如果前缀结尾和后缀开头都为 需要自动去重 约束 不用考虑前后缀URL不合法情况 输入描述 url前缀
  • 从零开始学习软件测试-第39天笔记

    接口测试 http消息结构 请求报文 请求行 请求方式 url 协议版本 请求头 空行 请求体 响应报文 响应行 协议版本 状态码 状态消息 响应头 空行 响应体 请求参数类型 path参数 写在路径中的 https xxx xxx com
  • 监控服务器资源定位性能瓶颈,服务端性能监控

    服务端性能监控 内容精选 换一换 JUG Java Salon 11欢迎广大 Java技术开发者或爱好者 参加 Java技术沙龙新一期来了 本次由上海 南京和广东等多地Java用户组 JUG Java User Group 联合主办 还邀请
  • shell排序 C++

    Shell排序算法严格来说基于插入排序的思想 又称为希尔排序或缩小增量排序 Shell排序算 法的排序流程如下 1 将有 n个元素的数组分成n 2 个数字序列 第 1 个数据和第n 2 1 个数据为一对 2 一次循环使每一个序列对排好顺序
  • C# 线程浅谈 (二)

    上一篇写Thread 这一篇写Task 优缺点 百度吧 反正看那个好用用那个 创建控制台程序 新建TaskDom类 还是看怎么创建 怎么使用 怎么带参 怎么返回值 这里都体现了 class TaskDom int count 0 publi
  • 并发库:同步工具类

    1 Semaphore计数信号量 Semaphore计数信号量维护了一个许可集 用于限制访问某些资源的线程数目 并提供同步机制 通俗来说 就是可以控制让多个线程拿到许可 拿到许可的线程可以并发管理同一个资源 这些拿到许可的线程可以看做一个整
  • react、umi、request设置请求头添加token

    1 在utils文件夹里的request js里添加 添加请求头 request interceptors request use url options gt 判断本地session是否有数据 如果有就得到token 并付给请求头 if
  • 循环链表详解(循环单链表/循环双链表)

    目录 一 循环单链表 二 循环双链表 一 循环单链表 循环单链表的表尾结点的next指针总是指向头结点 所以在初始化循环单链表的时候 需要记得将头结点的next指针指向头结点自己 判断循环单链表是否为空 只要判断头结点的next指针是否指向
  • Outlook后台启动及自动隐藏

    1 开机启动 修改注册表 把outlook添加到开机选项中 2 最小化时隐藏 a 启动outlook b 右下角任务栏中 右键勾选 最小化时隐藏 即可 3 将outlook关闭按钮修改为最小化 a 访问 http www reliefjet
  • Python3,网站搭建之数据库表设计及数据存储!文末的彩蛋,我酸了~

    搭建自己的网站 是作为一个码农成功标志之一 那其他成功标志有啥呢 嘿 左手搂着白富美 右手撸着小烧烤 脚底踩着桑塔纳 嗯 这么潇洒的人生 就从数据库表设计及数据存储开始吧 数据库表设计及存储数据 1 爬取数据 2 创建数据库 2 1 创建数
  • 校oj200——带结构体的分数归并排序+字典序人名

    200 给出班里某门课程的成绩单 请你按成绩从高到低对成绩单排序输出 如果有相同分数则名字字典序小的在前 时间限制 2 sec 内存限制 128 MB 试题描述 给出班里某门课程的成绩单 请你按成绩从高到低对成绩单排序输出 如果有相同分数则
  • 在Centos7环境安装MySQL

    0 说明 安装与卸载中 用戶全部切换成为root 初期 mysql先使用root进行 尽快适应mysql语句 后期学习用戶管理 再考虑新建普通用戶 1 从普通用户切换到root用户 2 在root用户目录下创建mysql文件夹 之后MySQ
  • 经典面试题 之 哨兵(Sentinel)模式

    1 什么是哨兵模式 反客为主的自动版 能够自动监控master是否发生故障 如果故障了会根据投票数从slave中挑选一个作为master 其他的slave会自动转向同步新的master 实现故障自动转义 2 原理 sentinel会按照指定
  • 刺激战场怎么战斗服务器响应超时,绝地求生刺激战场网络延迟高怎么办 网络延迟解决方法...

    类型 动作射击大小 669 2M语言 中文 评分 4 0 标签 立即下载 绝地求生刺激战场这款射击游戏很受玩家的喜欢 玩家在游戏中可以随时开局吃鸡 不过这款游戏的网络要求会比较高 不然很然后被杀死 那绝地求生刺激战场网络延迟高怎么办 西西小
  • 【美赛】2023年MCM问题Y:理解二手帆船价格(代码&思路)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 数据与术语表 2 1 数据 2 2 术语表 3 超级软件分享与资源下载 3 1 软件分享 3 2 资源
  • 归并排序 mergeSort

    归并排序 mergeSort 基本概念 归并排序的实现 时间复杂度 和 空间复杂度 稳定性 基本概念 将一个数组不断的二分 直到不能分为止 然后将不断对比合并 归并排序适用于链表 不需要额外的储存空间 但是对于数组 需要额外的储存空间 归并
  • push本地代码到gitlab出错

    push本地代码到gitlab出错 刚创建的gitlab版本库 在push代码时出错 git push u origin master To git github com Demo git rejected master gt master
  • getaddrinfo函数解析

    IPv4中使用gethostbyname 函数完成主机名到地址解析 这个函数仅仅支持IPv4 且不允许调用者指定所需地址类型的任何信息 返回的结构只包含了用于存储IPv4地址的空间 IPv6中引入了getaddrinfo 的新API 它是协
  • mysql jdbc 连接串_Mysql JDBC 连接串参数说明

    MySQL的 JDBC URL 格式 for Connector J 如下例 jdbc mysql host port host port database 参数名1 参数值1 参数名2 参数值2 现只列举几个重要的参数 如下表所示 参数说
  • python函数装饰器

    文章目录 一 简单了解装饰器 二 装饰器练习 三 多个装饰器 四 装饰器拓展 1 基础版 无参数的装饰器 2 升级版 有参数的装饰器 一 简单了解装饰器 装饰器 Decorators 是 Python 的一个重要部分 简单地说 他们是修改其