命名参数没有默认值?

Rya*_*yan 3 python python-2.7

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

def t(a=None, b=None):
    return a+b
Run Code Online (Sandbox Code Playgroud)

然后我可以打电话

 t(b=2, a=5)
Run Code Online (Sandbox Code Playgroud)

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

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')
Run Code Online (Sandbox Code Playgroud)

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

例如

t(a=3) # raise error
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 9

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

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

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

t(a=3, b=4)
Run Code Online (Sandbox Code Playgroud)

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


Jon*_*art 2

但是,如果 a 和 b 都不是可选的,那么我需要在运行时检查该函数,例如

不,你不知道。只是不提供默认值:

def t(a, b):
    return a + b
Run Code Online (Sandbox Code Playgroud)

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

t()
Run Code Online (Sandbox Code Playgroud)

会导致错误:

TypeError: t() takes exactly 2 arguments (0 given)
Run Code Online (Sandbox Code Playgroud)

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

t(c=4)
Run Code Online (Sandbox Code Playgroud)

也会导致错误:

TypeError: t() got an unexpected keyword argument 'c'
Run Code Online (Sandbox Code Playgroud)