python 装饰器有哪些_python装饰器有什么用

5d9d463ebbbfd327.jpg

简言之,python装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使用python装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。

一般而言,我们要想拓展原来函数代码,最直接的办法就是侵入代码里面修改,例如:import time

def func():

print("hello")

time.sleep(1)

print("world")

这是我们最原始的的一个函数,然后我们试图记录下这个函数执行的总时间,那最简单的做法就是:#原始侵入,篡改原函数

import time

def func():

startTime = time.time()

print("hello")

time.sleep(1)

print("world")

endTime = time.time()

msecs = (endTime - startTime)*1000

print("time is %d ms" %msecs)

但是如果你的Boss在公司里面和你说:“小祁,这段代码是我们公司的核心代码,你不能直接去改我们的核心代码。”那该怎么办呢,我们仿照装饰器先自己试着写一下:#避免直接侵入原函数修改,但是生效需要再次执行函数

import time

def deco(func):

startTime = time.time()

func()

endTime = time.time()

msecs = (endTime - startTime)*1000

print("time is %d ms" %msecs)

def func():

print("hello")

time.sleep(1)

print("world")

if __name__ == '__main__':

f = func

deco(f)#只有把func()或者f()作为参数执行,新加入功能才会生效

print("f.__name__ is",f.__name__)#f的name就是func

这里我们定义了一个函数deco,它的参数是一个函数,然后给这个函数嵌入了计时功能。然后你可以拍着胸脯对老板说,看吧,不用动你原来的代码,照样拓展了它的函数功能。

更多学习内容,请点击python学习网。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jQuery数据转换与提交

json2.js序列化,即JSON对象转换成String字符串: JSON.stringify({ id: 1, name: jsons });反序列化,即String转JSON对象: JSON.parse("{ id: 1, name: jsons }");jquery.json2xml.jsJSON对象转换为XML字符串: $.json2xml({ id: 1, …

linux中查看相关日志记录,linux重启查看日志及历史记录 查询原因

linux系统文件通常在/var/log中下面是对下面常出现的文件进行解释/var/log/message ---------------------------------------系统启动后的信息和错误日志/var/log/secure ------------------------------------------与安全相关的日志信息/var/log/maillog ------------------…

04,认证、权限、频率

认证组件 Django原生的authentic组件为我们的用户注册与登录提供了认证功能,十分的简介与强大。同样DRF也为我们提供了认证组件,一起来看看DRF里面的认证组件是怎么为我们工作的!models.py# 定义一个用户表和一个保存用户Token的表 class Use…

sun.misc.Unsafe和堆外内存

sun.misc.Unsafe类允许您执行许多Java中不应该做的事情,但是在非常特殊的情况下仍然有用。 必须在99%的时间避免这种情况,但是在极少数情况下,这是唯一有意义的解决方案。 这篇文章考虑了它在OpenHFT中的使用方式以及我希望在Jav…

jq获取input选取的文件名_tushare获取交易数据并可视化分析

获取数据是金融量化分析的第一步,找不到可靠、准确的数据,量化分析就无从谈起。随着信息技术的不断发展,数据获取渠道也越来越多,尤其是Python网络爬虫,近几年愈来愈火。然而,很多人毕竟精力有限&#xff0…

linux电脑做笔记软件,知识管理工具, 自由格式数据库, 笔记软件以及个人信息管理...

myBase Desktop 7.3.5 for Linux/MacOSX/Windows 2020-2-20新增 [数学公式 MathJax for Markdown]、[自动锁屏保护]、[粘贴图片为附件]、[完整复制带图片内容],以及部分问题修订,详见:更新日志;数学公式插件:缺省安装后…

js模板引擎

模板引擎 function tmpl(str, o) {return str.replace(/\\?\{([^{}] )\}/g, function (match, name) {return (o[name] undefined) ? : o[name];});}调用示例 var html tmpl(html, { user_id: user_id, user_name: user_name });更多专业前端知识,请上 【猿204…

原来游戏技术行业最大的秘密竟然是...

欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯游戏云发表于云社区专栏 本篇文章主要是分享游戏业务面临的安全风险场景,以及基于这些场景的特点,我们应该如何做好对应的防护。 【一、背景:游戏行业DDoS攻击…

Leetcode 565. Array Nesting

题目 链接:https://leetcode.com/problems/array-nesting/ Level: Medium Discription: A zero-indexed array A of length N contains all integers from 0 to N-1. Find and return the longest length of set S, where S[i] {A[i], A[A[i]], A[A[A[i]]], ... }…

指定Gradle构建属性

属性是用于轻松自定义Gradle构建和Gradle环境的宝贵工具。 我将在本文中演示一些用于指定Gradle构建中使用的属性的方法。 Gradle支持项目属性和系统属性 。 这篇文章中有趣的是两者之间的主要区别是如何访问它们。 通过常规Java / Groovy系统属性访问方法访问系统属性时&…

python数字转中文字符_Python实现中文数字转换为阿拉伯数字的方法示例

本文实例讲述了Python实现中文数字转换为阿拉伯数字的方法。分享给大家供大家参考,具体如下: 一、需求 今天写了三千二百行代码。 今天写了3200行代码。 两行意思相同,只是表达方式不太能够,统一掉。 二、原理 数字的特征是 数字 …

调程序时的小错误

1.未能找到类型或命名空间名称“Form1”(是否缺少 using 指令或程序集引用?) 应该是复制代码的时候,把程序入口处的命名空间和Form1的命名空间不一致 2.检索 COM 类工厂中 CLSID 为 {XXXX-XXXX-XXX-XXXXX-XXX} 的组件时失败,原因是出现以下错误: 80040…

eclipse中设置Linux编码环境,更改eclipse中console编码

1.在eclipse.ini的-vmargs下面加上「-Dfile.encodingUTF-8」。2.eclipse-->Window-->Preferences-->General-->Workspace-->Text file encoding-->UTF-83.Installed JREs-->Default VM Arguments:-->-Dfile.encodingUTF-84.eclipse-->Run-->Run …

[记录] JavaScript 中的BOM操作

转载于:https://www.cnblogs.com/yuxi2018/p/9520059.html

GC对吞吐量和延迟的影响

每个Java应用程序都必须解决的一种类型的问题与垃圾回收有关。 当垃圾收集器工作时,它代表了一项奇妙的发明。 如果不是这样,或者GC做家务的方式变得不可预测,那么您就有一个朋友变成了敌人。 这篇文章是关于垃圾收集暂停时间的。 或更准确地…

linux odbc连接数据库失败,在Linux中使用RODBC连接到SQL Server时出错

我在linux服务器上运行不同的r程序。程序因数据库连接失败而出现以下错误: -1: In odbcDriverConnect(paste0("DRIVER{SQL Server}; server", server,: [RODBC] ERROR: state 08001, code 0, message[unixODBC][FreeTDS][SQL Server]Unable to connect to…

高级cmd攻击命令_一步一步学习DVWA渗透测试(Command Injection命令行注入)-第七次课...

各位小伙伴,今天我们继续学习Command Injection,翻译为中文就是命令行注入。是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。在OWASP TOP 10中一种存在注入漏洞,最常见的就是SQL和命令行注入。PHP开发的…

IDEA插件之 CodeGlance

在编辑代码最右侧,显示一块代码小地图 这款插件使用效果图如下,个人感觉还是有点用处,滚动条太小,有这个地图,拖动起来更加方便一点 原文地址:http://tengj.top/2017/02/22/idea1-1/转载于:https://www.cnblogs.com/al…

移动端图片上传方法

移动端图片上传方法 实现效果 文件下载 http://files.cnblogs.com/files/sntetwt/移动端图片上传.rar 实现步骤 一、隐藏<input type"file" id"file" name"Filedata" style"display:none;" accept"image/*" /> 二、…

SQL UPDATE with INNER JOIN

mysql - SQL UPDATE with INNER JOIN - Stack Overflowhttps://stackoverflow.com/questions/14491042/sql-update-with-inner-join MySQL UPDATE JOIN | Cross-Table Update in MySQLhttp://www.mysqltutorial.org/mysql-update-join/ 转载于:https://www.cnblogs.com/rgqancy…