最近在看一些源码时候,发现大家都喜欢用functiools partial,其实就是想把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。
下面我举个例子
class Sample(object):
def __init__(self):
pass
def __wrap(self, method, *args, **kwargs):
key = args[0]
server = self.get_server(key)
f = getattr(server, method)
return f(*args, **kwargs)
def __getattr__(self, method):
if method in ['set', 'get']:
return functools.partial(self.__wrap, method)
else:
raise NotImplementedError("method '%s' cannot be sharded" % method)
---
instance = Sample()
instance.set('name', 'raingo') #等价于__wrap(method='set', 'name', 'raingo')
这里我们主要看return functools.partial(self.__wrap, method)
这语句,其实就是去执行__wrap()函数,并默认把method这个变量传进去__wrap()函数,并且传给set方法的参数也传给了__wrap()函数
网友评论