如何将两个或三个参数传递给函数?

时间:2017-11-08 22:38:41

标签: python python-3.x optional-parameters

这可能与传统的* 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中的任意两个,并且仍然保留指定所有三个的选项。最恐怖的做法是什么?

2 个答案:

答案 0 :(得分:3)

您可以为它们提供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

答案 1 :(得分:0)

替代方法:

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