Python 偏函数functools

2016-09-23  本文已影响45人  raingolee

最近在看一些源码时候,发现大家都喜欢用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()函数

上一篇下一篇

猜你喜欢

热点阅读