函数式编程——装饰器、偏函数

一、装饰器

       装饰器就是用于扩展原来函数功能的一种函数,这个函数特殊之处在于它的返回值也是一个函数,使用Python装饰器的好处在于不更改原函数的代码前提下给函数增加新功能。它经常用于有切面需求场景,如:插入日志性能测试事务处理缓存权限校验等场景,装饰器是解决这类问题的绝佳设计。有了装饰器,我们可以抽离出大量与函数功能本身无关的代码到装饰器并继续使用。总的来说,装饰器的作用就是为已经存在的函数添加额外的功能

        总结一下:

        定义:本质是函数,(装饰其他函数)就是为其他函数添加附加的功能。

        原则:①不能修改被装饰的函数的源代码; ②不能修改被装饰的函数的调用方式 ;

       先看一个简单的小例子,通过小例子加深对装饰器理解:

# -*- coding:utf-8 -*-
import time
def func():
    print("I am Python!")
    time.sleep(1)
    print("Hello,World!")

func() #I am Python! Hello,World!

        现在有一个新的需求,希望可以记录下函数的执行时间,那最简单的做法是侵入代码里面修改:

# -*- coding:utf-8 -*-
#修改原始代码,添加记录函数执行时间
import time
def func():
    startTime = time.time() #起始时间
    print("I am Python!")
    time.sleep(1)
    print("Hello,World!")
    endTime = time.time() #终止时间
    t = (endTime - startTime)*1000
    print("time is %d ms" %t)

func()

结果:
I am Python!
Hello,World!
time is 1000 ms

       如果函数func1()、func2()...也有类似的需求,怎么做?再像上面代码那样写一次?这样会造成大量雷同代码,为减少重复代码,可以这样做,重新定义一个新函数:专门处理时间,处理完时间之后再执行真正业务代码。

# -*- coding:utf-8 -*-
#不直接修改原始代码,添加记录函数执行时间
import time
def deco(func):
    startTime = time.time()
    func()
    endTime = time.time()
    t = (endTime - startTime)*1000
    print("time is %d ms" %t)

def func():
    print("I am Python!")
    time.sleep(1)
    print("Hello,Wor
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值