我知道我可以创建一个命名的参数化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)
如果参数不是可选参数,请不要使用默认值.
您仍然可以将这些参数用作调用中的命名参数; Python函数中的所有参数都命名为:
def t(a, b):
return a+b
t(a=3, b=4)
Run Code Online (Sandbox Code Playgroud)
请注意,传入错误的参数计数始终是运行时检查,而不是编译时检查.作为一种动态语言,在编译时不可能知道t调用它时实际对象是什么.
但是,如果 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)