摘要: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"