命名参数没有默认值?

时间:2016-11-20 10:33:30

标签: python python-2.7

我知道我可以创建一个命名参数化的python函数,例如

public void updateResult(String topic_name, int userId) 

然后我可以用

打电话
def t(a=None, b=None):
    return a+b

但是,如果 t(b=2, a=5) 和{ a不是可选的,那么我需要在运行时检查函数,例如

b

是否有可能在编译时检查并尽快失败?

e.g。

def t(a=None, b=None):
    if a is not None and b is not None:
        return a+b
    else:
        raise Exception('Missing a or b')

2 个答案:

答案 0 :(得分:8)

如果参数不是可选参数,请不要使用默认值。

您仍然可以将这些参数用作呼叫中的命名参数; Python函数中的所有参数都命名为:

def t(a, b):
    return a+b

t(a=3, b=4)

请注意,传入错误的参数计数始终是运行时检查,而不是编译时间检查。作为一种动态语言,在编译时不可能知道实际对象t在调用它时会是什么。

答案 1 :(得分:2)

  

然而,如果一个& b不是可选的,那么我需要在运行时检查函数,例如

不,不。只是不提供默认值:

def t(a, b):
    return a + b

尝试在没有正确数字参数的情况下调用它:

t()

会导致错误:

TypeError: t() takes exactly 2 arguments (0 given)

或者,尝试使用错误命名的参数调用它:

t(c=4)

也会导致错误:

TypeError: t() got an unexpected keyword argument 'c'