使用functools.partial和部分参数

时间:2017-06-21 21:35:07

标签: python python-3.x functools

尝试使用partial,我发现了以下行为:

首先,我定义了一个函数foo,它接受​​2个非关键字参数:

>>> def foo(salutation, name):
...     print(salutation, name)

然后,我使用partial来创建一个更高阶的包装器。

>>> from functools import partial 
>>> f = partial(foo, name='Coldspeed')

然后,这样称呼:

>>> f('Hey')

这给了我预期的Hey Coldspeed。接下来,我尝试将partial应用于isinstance

>>> f = partial(isinstance, classinfo=str)
>>> f('hello')

但这给了我一个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: isinstance() takes no keyword arguments 

我尝试classinfo作为参数名称,因为这是文档中指定的内容(上面链接)。似乎的实际定义具有名为classinfo的第二个参数,因为文档可能会另有说明。

现在,我是否可以使用第二个参数创建部分函数而不必强制指定argname?我绝对不能做f = partial(isinstance, str),因为str将被视为第一个参数,而不是第二个参数。如果可能的话,想要在不使用lambda函数的情况下找到一种方法。

1 个答案:

答案 0 :(得分:2)

不幸的是,这不是functools.partial所支持的。您需要编写自己的版本来支持它,或者在某个第三方库中找到一个版本。