Python函数之装饰器和偏函数

Python函数 - 装饰器与偏函数

一、装饰器

函数装饰器本质上是一个python函数,它可以让其他函数在不需要进行代码变动的前提下添加额外的功能(开放封闭原则),装饰器的返回值是一个函数对象。

#Authors:xiaobei
#装饰器功能定义,可以复杂化,这里只作简化。
def decor():
    print("This is a Decoration!")

##简单装饰器示例
def outer(func):
    def inner():
        decor()
        func()
    return inner
#Authors:xiaobei
# @符号将装饰器应用到函数中

@outer		#相当于func = outer(func)
def func():
    print("This is a Function!")
func()

运行结果如下:

 This is a Decoration!
 This is a Function!

简单来说,函数装饰器 = 高阶函数 + 函数嵌套 + 闭包。其中高阶函数定义:

1.函数接受参数为函数名。
2.函数返回值为函数名。
3.满足上述任一条件即为高阶函数。

它经常用于切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限检验等场景。

有了函数装饰器就抽离出大量与函数本身功能无关的雷同代码并继续使用。

二、偏函数

所谓偏函数,是指固定一个函数的一个或者多个参数,返回一个新的函数,这个新的函数用于接收剩余参数,以便于完成要求。听起来可能难以理解,通过下面的例子就可以理解:

#Authors:xiaobei

#输出十进制1010的十进制数
print(int("1010",base = 10))
#输出二进制1010的十进制数
print(int("1010",base = 2))

输出结果:

1010
10

上面的代码实现了将一字符串转换成整型数据并输出的功能,用到了int()函数,它有两个参数[str,[base]]。

但当我们有一大批数据需要将它们以二进制数逐个转换为整型数据十进制数时,每次都要传递两个参数(若是其他情况下的其他函数可能更糟糕),这时我们就需要固定其中一个参数(令base = 2,默认为10)。

用如下代码:

#Authors:xiaobei
def int2(str):
    return int(str,base = 2)

print(int2("1010"))

运行结果:

10

上述int2()就是一个偏函数,当然我们有一个更为简单点的办法来实现上述功能,引入functools模块:

#Authors:xiaobei
import functools

int2 = functools.partial(int,base = 2)	#等价于上述def int2()……
print(int2("1010"))

简言之,偏函数是简化函数调用的一种方式,主要表现为对函数参数进行部分固化,而python中借用functools.partial来完成。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值