你不能用partial
. 这是因为split
使用了PyArg_ParseTuple
C API 中不提供关键字参数的函数。从 python 的角度来看,如果方法被定义为:
def split(self, *args):
if len(args) > 2:
raise TypeError(...)
sep = args[0] if args else None
maxsplit = args[1] if len(args) > 1 else -1
...
Partial 只能按顺序分配位置参数。这在文档中提到,他们在其中声明partial
“大致相当于”:
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
请注意,return func(*(args + fargs), **newkeywords)
这清楚地表明您传递给的参数partial
被附加到其他函数参数。
结论是lambda
比 更强大partial
。
附带说明一下,在 python3.3 中,您可以指定maxsplit
为关键字参数:
>>> 'some string with spaces'.split(maxsplit=2)
['some', 'string', 'with spaces']
许多其他具有相同问题的方法/功能也是如此。