как узнать, удовлетворяет ли частичное все аргументы - PullRequest
0 голосов
/ 08 ноября 2018

если я создаю вызов функции с использованием частичного, есть ли способ запросить частичное, чтобы увидеть, все ли аргументы для этой функции были предоставлены?Например, в приведенном ниже коде есть ли какая-либо функция, которую я могу передать empty_partial, partial_partial и full_partial в, которая будет возвращать True только на full_partial, указывая, что все аргументы были предоставлены?

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 обязательных аргумента, если явызвал (не пытаясь вызвать и разобрать ошибку)?

1 Ответ

0 голосов
/ 08 ноября 2018

получить подпись частичного объекта, затем убедитесь, что 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 для поддержки сигнатур функций)

...