python装饰器 语法与解读

import time #加载time模块

from functools import wraps #加载functools模块中的wraps函数

def cost_time(old_fn): # 注:cost_time是装饰器名 ,形参old_fn是要装饰的函数 装饰器最外层没有return,也就是不用返回的

@wraps(old_fn)    #它主要作用就是接收到原函数中的注析,所以括号内也是上面形参一样的

  def inner(*args, **kwargs): # inner它是cost_time这个装饰器的功能区,也就是要添加的功能在此写,它的形参为 *args, **kwargs 这两个,其实就是为了接收原函数中的参数

start_time = time.time() #innser的代码,记录执行原函数时的时间

res = old_fn(*args, **kwargs) # 这个是原函数,结果由变量 res保存,函数名与cost_time形参相同,它的形参与inner的形参相同

end_time = time.time()    #这个也是inner的代码 ,它记录原函数执行结束时的时间

print("花费时间为:", end_time - start_time) #运算并输出原函数执行所花费的时间

return res  # 返回原函数的结果

return inner #返回inner ,这个返回值是固定的,也就是上面inner的函数名,

@cost_time #注:@后面跟的名字就是装饰器的名字 ,

def kk():    #这个函数就是原函数,是要通过装饰器装饰的函数

#这行是函数注明

print(‘这就是原函数‘)

kk() #调用原函数,这样就自动进行装饰了.返回的结果就是这个函数执行所要花费的时间

原文地址:https://www.cnblogs.com/jshy/p/9465540.html

时间: 2024-08-27 06:11:35

python装饰器 语法与解读的相关文章

python 装饰器语法糖(@classmethod @staticmethod @property @name.)原理剖析和运用场景

引用:http://blog.csdn.net/slvher/article/details/42497781 这篇文章系统的介绍这几者之间的关系和区别.有兴趣的朋友可以到上面的链接查看原文,这里我把原文拷贝如下(如有侵权,通知马上删除) ==================================================================== 在阅读一些开源Python库的源码时,经常会看到在某个类的成员函数前,有类似于@staticmethod或@classme

python装饰器&语法糖

装饰器: 1 >>> def a(func): 2 ... def b(*argv): 3 ... print("in b") 4 ... return func(*argv) 5 ... return b 6 ... 7 >>> def c(a,b): 8 ... print(a**2,b**2) 9 ... 10 >>> c = a(c) 11 >>> c(2,3) 12 in b 13 4 9 14 >

python装饰器 语法糖

简介: 装饰器(Decorators)是 Python 的一个重要部分.简单地说:他们是修改其他函数的功能的函数. 比如说我们写flask,路由就是用装饰器定义的.如果写权限控制,那么权限控制一般也是由装饰器来实现的.日志记录,一般也可以通过装饰器来实现. 简单说,就是为了给某些函数增加一种或几种功能的做法. 下面举例实现. 一:基本函数 1.源码 from time import sleep def watch_movie(): print('看电影') sleep(3) print('The

python 装饰器(语法糖)

def  login(func):    def testlogin():        for  i in range(3):            _username="abc"            _passwrod="123456"            user_status = False            iuput = input("请输入账号:")            input1 = input("请输入密码

python装饰器方法

前几天向几位新同事介绍项目,被问起了@login_required的实现,我说这是django框架提供的装饰器方法,验证用户是否登录,只要这样用就行了,因为自己不熟,并没有做过多解释. 今天查看django官网,忽然发现,装饰器用法并不是django框架提供的,而是python的一种语法,真心汗一个,自以为python用的很熟了,看来是井底之蛙! 恰逢周末,静下心来了解一下python的装饰器方法. 谈到代码里的装饰器,很自然的想到了设计模式中的装饰器模式,为了防止再次张冠李戴,特意翻了翻设计模

python学习day07 高阶函数 装饰器 语法糖

语法糖对于计算机的运行并没有任何的好处,但是对于程序员的好处是很大的,方便我们写代码,所以称为糖 #******************************装饰器************************* # 装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象. # 装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景 import time def func1(): print('in f

Python装饰器完全解读

1 引言 装饰器(Decorators)可能是Python中最难掌握的概念之一了,也是最具Pythonic特色的技巧,深入理解并应用装饰器,你会更加感慨——人生苦短,我用Python. 2 初步理解装饰器 2.1 什么是装饰器 在解释什么是装饰器之前,我们有必要回顾一下Python中的一些思想和概念.我们都知道,Python是一门面向对象的语言,Python基本思想就是一些皆对象,数据类型是对象.类是对象.类实例也是对象……对于接下来我们要说的装饰器而言,最重要的是,函数也是对象! 你没看错,函

5.初识python装饰器 高阶函数+闭包+函数嵌套=装饰器

一.什么是装饰器? 实际上装饰器就是个函数,这个函数可以为其他函数提供附加的功能. 装饰器在给其他函数添加功能时,不会修改原函数的源代码,不会修改原函数的调用方式. 高阶函数+函数嵌套+闭包 = 装饰器 1.1什么是高阶函数? 1.1.1函数接收的参数,包涵一个函数名. 1.1.2 函数的返回值是一个函数名. 其实这两个条件都很好满足,下面就是一个高阶函数的例子. def test1(): print "hamasaki ayumi" def test2(func): return t

python装饰器通俗易懂的解释!

python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,猜有点点开始明白了.总结了一下解释得比较好的,通俗易懂的来说明一下: 小P闲来无事,随便翻看自己以前写的一些函数,忽然对一个最最最基础的函数起了兴趣: 1 def sum1(): 2 sum = 1 + 2 3 print(sum) 4 sum1() 此时小P想看看这个函数执行用了多长时间,所以写了几句代码插进去了: 1 import time 2 3 def