如何判断部分是否满足所有参数

how to tell if a partial has all arguments satisfied

如果我正在使用 partial 构建函数调用,是否有任何方法可以查询 partial 以查看是否已提供该函数的所有参数?例如在下面的代码中是否有任何我可以将 empty_partialpartial_partialfull_partial 传递给的函数,它只会在 [=14] 上 return True =], 说明所有的参数都提供了?

from functools import partial

def foo(bar, baz):
    return bar + baz

empty_partial = partial(foo)
partial_partial = partial(empty_partial, bar=3)
full_partial = partial(partial_partial, baz=5)

print(full_partial())
# 8

如果我尝试调用空部分,我会收到这样的消息:

empty_partial = partial(foo)
empty_partial()
TypeError: foo() missing 2 required positional arguments: 'bar' and 'baz'

如果我确实调用它(无需尝试调用它并解析错误),它缺少 2 个必需的参数,我从哪里得到这个错误?

获取部分对象的签名,然后检查以确保 signature.bind 不会引发 TypeError

import inspect

def partial_satisfied(partial_fn):
    signature = inspect.signature(partial_fn.func)
    try:
       signature.bind(*partial_fn.args, **partial_fn.keywords)
       return True
    except TypeError:
       return False

应该可以解决问题(需要 python 足够新以支持函数签名)