python之偏函数

摘要:python的设计核心原则就是简洁——在这种原则的指导下,诞生了lambda表达式和偏函数:二者都让函数调用变得简洁。本文主要为你介绍偏函数的应用。

为什么要用偏函数

如果我们定义了一个函数,比如说将四个数相加add(one ,two,three,four),上层有很多函数需要调用这个函数。在这些调用中,80%的调用传递的参数都是one=1,two=20,如果我们每都输入相同的参数,这样乏味而且浪费,固然,我们可以通过默认参数来解决这个问题;但是如果另外我们也需要参数是one=2,two=10的情况呢?所以,我们需要一种函数,能够将任意数量的参数的函数转化成带剩余参数的函数对象。

通过上面,我们大概明白了什么是偏函数:简单的说,偏函数就是某一种函数带有固定参数的实现,所以,我们需要:

1)给偏函数命名

2)传递固定参数

from functools import partial
def add(a,b):
    return a+b

p1 = partial(add, 100)

p2 = partial(add, 90)

print('p1=', p1(99))

print('p2=', p2(30))

'''
结果:
p1=199
p2=120    
'''

使用偏函数

结合getattr反射

            import functools
            class RequestContext(object):
                def __init__(self):
                    self.request = "xxxxx"
                    self.session = "iusdkfjlskdf"

            obj = RequestContext()
            # obj.request
            # obj.session



            def get_data(name):
                return getattr(obj,name)

            request_proxy = functools.partial(get_data,'request')
            session_proxy = functools.partial(get_data,'session')

            request = request_proxy()
            print(request)

            session = session_proxy()
            print(session)
结果:
"xxxxx"
"iusdkfjlskdf"

 



 

posted @ 2018-04-24 11:01  shuyang  阅读(246)  评论(0编辑  收藏  举报