强制函数调用者决定使用哪个默认值
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]
假设我有以下功能:
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]