强制函数调用者决定使用哪个默认值

Force function caller decide which default value is used

假设我有以下功能:

def myFun(a=None, b=None):
    print a, b

现在调用函数:

myFun("hi") # Case 1
>>>hi None

myFun(b="hi") # Case 2
>>>None hi

myFun(a="hi") # Case 3
>>>hi None

如果函数调用者没有决定将值 "hi" 分配给哪个变量,是否有办法抛出异常?这意味着我想在第一种情况下有例外,但在第二和第三种情况下没有。我使用 python 2.7.

def my_fun(**kwargs):
    a = kwargs.get("a", None)
    b = kwargs.get("b", None)
    # have your code here...

然后:my_fun("hi") 不应该工作...

在Python3中你可以指定keyword-only arguments:

def myFun(*, a=None, b=None):
    print(a, b)

myFun('hi')

加注

TypeError: myFun() takes 0 positional arguments but 1 was given

在 Python2 中,与 一样,您可以使用 **kwargs 强制所有参数成为关键字参数。

def myFun(**kwargs):
    a, b = kwargs.get('a'), kwargs.get('b')
    print(a, b)

myFun('hi')
# TypeError: myFun() takes exactly 0 arguments (1 given)

实际上,您可以使用 **kwargs 允许用户提供他们想要的任何参数。

def myFun(**kwargs):
    print kwargs[a]
    print kwargs[b]

如果没有定义 a 或 b,这将导致错误,但它们不是很有用。

您可以通过检查该值是否存在来犯自己的错误。例如:

def myFun(**kwargs):
  if not kwargs.get(a):
    raise Exception('a is not here!')
  if not kwargs.get(b):
    raise Exception ('b is not here!')
  print kwargs[a], kwargs[b]