【问题标题】:Using functools.partial with partial arguments [duplicate]使用带有部分参数的 functools.partial [重复]
【发布时间】:2017-06-21 21:35:06
【问题描述】:

尝试使用部分方法,我观察到以下行为:

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

>>> 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 函数。

【问题讨论】:

  • 只要f = lambda item: isinstance(item, str)
  • @jonrsharpe 试图完全避免lambdas...:p
  • 然后用def 将它写出来。原理相同:def f(item): return isinstance(item, str).
  • @jonrsharpe 嗯,似乎是唯一的其他选择。不像我希望的那样pythonic,但是......

标签: python python-3.x functools


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2021-10-26
    • 1970-01-01
    相关资源
    最近更新 更多