python学习之偏函数

什么是偏函数?

实际上,偏函数主要辅助原函数,作用其实和原函数差不多,不同的是,我们要多次调用原函数的时候,有些参数,我们需要多次手动的去提供值。而偏函数便可简化这些操作,减少函数调用,主要是将一个或多个参数预先赋值,以便函数能用更少的参数进行调用。

为清楚了解,我们看下面的代码

def my_sum(*args):
    result = 0
    for i in args:
        result += i
    return result

my_sum(1,2,3,4)

从上面的代码可知,此代码的功能就是实现一个求和功能,实例中是求取1,2,3,4四个数的和,但是当我们需要在这个结果上再加上7,8,9 甚至更多的数字或者求万又有更多的需求,应该怎么办呢,如下

my_sum(1,2,3,4)+my_sum(7,8,9)

注意到,每次有新需求时,都需要再次调用my_sum函数,这样很费力,参数多了之后更麻烦,而偏函数便可解决这类问题,因此偏函数可总结为:当函数的参数个数太多,需要简化时,使用 functools.partial 可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单

以下,我们再从代码层上看看偏函数

偏函数说明
  • import:from functools import partial
  • 第一个参数:自定义函数或者是python内置函数
  • 第二个参数:可变参数,如果没有指定关键字,按原有函数的参数顺序进行补充,参数将作用在原函数上,如果指定关键字就对应到所指位置
基础款
def add(a, b):
    return a + b


if __name__ == "__main__":
    # 重新生成一个偏函数对象(其中一个参数已知),并赋予mysum,然后再调用这个新函数对象,10为预先设定的参数
    mysum = partial(add, 10)
    print mysum(5)

# 结果
15
关键字参数
def add(a, b=2):
    return a + b


def add2(a=2, b=3):
    return a + b


if __name__ == "__main__":
    mysum = partial(add, 10)
    print mysum()

    # 也可根据关键字预先设定的参数值
    mysum2 = partial(add, b=3)
    print mysum2(1)

    # 如果没有关键字,按原有参数顺序补充
    mysum3 = partial(add2, 1)
    print mysum3()

# 结果
12
4
4
升级款
class User(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age


def get_user_info(user, property_name):
    value = eval('user.' + property_name)
    return value


if __name__ == "__main__":
    user = User('xiaoming', 20)
    func = partial(get_user_info, property_name='age')
    print func(user)

# 结果
20
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值