Цепные kwargs в вызове функции - PullRequest
0 голосов
/ 22 марта 2020

У меня есть функции AND и OR, которые оценивают выражение. Я хотел бы объединить эти элементы в нечто вроде этого:

>>> AND(
        # kwarg
        Neutered=True, 
        # reduces/evaluates to arg/value
        OR(Black=False, AND(Female=False, NOT(White=True)), AND(NOT(Female=False), OR(White=True, Tan=True))))

Тем не менее, я получаю эту ошибку при этом:

SyntaxError: позиционный аргумент следует за ключевым словом аргумента

Это потому, что OR оценивается как логическое значение, а не как kwarg, то есть то, как его нужно передавать. Какой хороший способ обойти эту проблему?

1 Ответ

1 голос
/ 22 марта 2020

Просто переставьте вызов, чтобы получить kwargs после аргументов:

AND(
    OR(AND(NOT(White=True), Female=False), AND(NOT(Female=False), OR(White=True, Tan=True)), Black=False),
    Neutered=True)

Или, если возможно, используйте оператор распаковки dict:

AND(
    Neutered=True,
    **OR(Black=False, **AND(Female=False, **NOT(White=True)), **AND(NOT(Female=False), OR(White=True, Tan=True))))
...