Вопрос:

Как передать два или три параметра в функцию?

python python-3.x optional-parameters

89 просмотра

2 ответа

21 Репутация автора

Возможно, это немного отличается от традиционной парадигмы * args ** kwargs:

У меня есть математическая функция, которая принимает три независимых параметра в качестве входных данных, однако ее также можно решить (не компактно), указав любые два из трех.

В настоящее время у меня есть некомпактное решение, основанное строго на a и b, с c в качестве необязательного ограничения:

def func(a,b,c=None):
  if c is not None:
    # do something with a, b, and c
  else:
    # do something with only a, b
  return result

Тем не менее, я хотел бы иметь возможность указать любые два из a, b или c, и при этом оставить возможность указать все три. Какой самый питонский способ сделать это?

Автор: Ben S. Источник Размещён: 08.11.2017 10:38

Ответы (2)


3 плюса

12668 Репутация автора

Вы можете просто дать им все значения по умолчанию None, а затем передать аргументы в качестве аргументов ключевого слова:

def foo(a=None, b=None, c=None):
    print(a, b, c)

foo(a=123, b=456)
foo(a=123, c=789)
foo(b=456, c=789)

Этот пример производит:

123 456 None
123 None 789
None 456 789
Автор: Tom Karzes Размещён: 08.11.2017 10:44

0 плюса

16544 Репутация автора

Альтернативный подход:

def func(**kwargs):
    p_keys = kwargs.keys()
    if 'a' in p_keys and 'b' in p_keys:
        # non-compact solution
        if 'c' in p_keys:
            # apply optional constraint
    elif set(p_keys).issubset({'a', 'b', 'c'}):
        # apply solution for 'any two'
    else:
        #complain loudly
        pass
    return
Автор: Bill Bell Размещён: 08.11.2017 11:25
Вопросы из категории :
32x32