使用带有部分参数的 functools.partial
Using functools.partial with partial arguments
尝试部分操作时,我观察到以下行为:
首先,我定义了一个函数 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
作为参数名称,因为这是文档(上面链接)中指定的名称。似乎实际定义 not 的第二个参数名为 classinfo
,正如文档可能另有说明的那样。
现在,我将如何在不强制指定 argname 的情况下使用第二个参数创建部分函数?我绝对不能做 f = partial(isinstance, str)
因为 str
将被视为第一个参数,而不是第二个。如果可能的话,我想找到一种不使用 lambda
函数的方法。
不幸的是,这不是 functools.partial
支持的。您需要编写自己的支持它的版本,或者在某处的某个 3rd 方库中找到一个。
尝试部分操作时,我观察到以下行为:
首先,我定义了一个函数 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
作为参数名称,因为这是文档(上面链接)中指定的名称。似乎实际定义 not 的第二个参数名为 classinfo
,正如文档可能另有说明的那样。
现在,我将如何在不强制指定 argname 的情况下使用第二个参数创建部分函数?我绝对不能做 f = partial(isinstance, str)
因为 str
将被视为第一个参数,而不是第二个。如果可能的话,我想找到一种不使用 lambda
函数的方法。
不幸的是,这不是 functools.partial
支持的。您需要编写自己的支持它的版本,或者在某处的某个 3rd 方库中找到一个。