用lambda重构部分函数

时间:2018-05-14 04:21:55

标签: python

在官方文档中10.2. functools 关于部分

大致相当于:

def partial(func, *args, **keywords):
    def newfunc(*fargs, **fkeywords):
        newkeywords = keywords.copy()
        newkeywords.update(fkeywords)
        return func(*args, *fargs, **newkeywords)
    newfunc.func = func
    newfunc.args = args
    newfunc.keywords = keywords
    return newfunc

我尝试用同义函数来理解通用结构。

partial = lambda func, *args, **kwargs: func(*args, **kwargs)

我的理解是否有意义?

1 个答案:

答案 0 :(得分:2)

你错过了两件大事。

首先,您的版本不会传递关键字参数。要做到这一点,你还需要打印它们:

TableViewController

但是让我们暂时忽略它。更大的问题是你错过了部分参数,这是lambda *args, **kwargs: func(*args, **kwargs) 的全部观点。例如:

partial

要做同样的事情,你需要这样做:

>>> def f(a, b):
...     return a + b
>>> add2 = partial(f, 2)
>>> add2(3)
5
>>> add2 = lambda *args: f(*args)
>>> add2(3)
f() missing 1 required positional argument: 'b'

......或等同于:

>>> add2 = lambda *args: f(2, *args)
>>> add2(3)
5

此外,没有充分的理由在这里使用>>> add2 = lambda *args: f(*((2,) + args)) >>> add2(3) 5 lambda的要点是:(a)您不必提出名称,(b)您可以在表达式中使用它。如果您只是在赋值语句中使用它来为其命名,那么最好使用lambda

def