在官方文档中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)
我的理解是否有意义?
答案 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