如何判断部分是否满足所有参数
how to tell if a partial has all arguments satisfied
如果我正在使用 partial 构建函数调用,是否有任何方法可以查询 partial 以查看是否已提供该函数的所有参数?例如在下面的代码中是否有任何我可以将 empty_partial
、partial_partial
和 full_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 足够新以支持函数签名)
如果我正在使用 partial 构建函数调用,是否有任何方法可以查询 partial 以查看是否已提供该函数的所有参数?例如在下面的代码中是否有任何我可以将 empty_partial
、partial_partial
和 full_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 足够新以支持函数签名)