如何用可选参数创buildPython函数?

我有一个Python函数,它需要几个参数。 在某些情况下,其中一些论点可能会被忽略。

def some_function (self, a, b, c, d = None, e = None, f = None, g = None, h = None): #code 

参数dh是各自具有不同含义的string。 我可以select哪个可选参数以任意组合进行传递是非常重要的。 例如, (a, b, C, d, e)(a, b, C, g, h)(a, b, C, d, e, f或全部select)。

如果我可以重载函数,那将是非常好的 – 但是我读到Python不支持重载。 我试图在列表中插入一些所需的int参数 – 并得到一个参数不匹配的错误。

现在我发送空string作为占位符,而不是前几个缺less的参数。 我希望能够使用实际值来调用一个函数。

有没有办法做到这一点? 我可以传递一个列表而不是参数列表吗?

现在使用ctypes的原型如下所示:

 _fdll.some_function.argtypes = [c_void_p, c_char_p, c_int, c_char_p, c_char_p, c_char_p, c_char_p, c_char_p] 

尝试调用它: obj.some_function( '1', 2, '3', g="foo", h="bar" ) 。 在所需的位置参数之后,您可以按名称指定特定的可选参数。

只需使用* args参数,它允许您在a,b,c之后传递a,b,c参数。 你将不得不添加一些逻辑来映射args-> c,d,e,f,但是它是一种超载的“方式”。

 def myfunc(a,b, *args, **kwargs): for ar in args: print ar myfunc(a,b,c,d,e,f) 

它会打印c,d,e,f


同样,你可以使用kwargs参数,然后你可以命名你的参数。

 def myfunc(a,b, *args, **kwargs): c = kwargs.get('c', None) d = kwargs.get('d', None) #etc myfunc(a,b, c='nick', d='dog', ...) 

然后kwargs将会有一个关于a,b之后a,b关键值的所有参数的字典