python中的泛型函数 - 调用具有未知数量参数的方法

use*_*052 7 python generics

我是python的新手,需要一些帮助......

我正在实现一个接受"fringe"参数的通用搜索函数,它可以是许多类型的数据结构.

在搜索方法中我有一句话:

 fringe.push(item, priority)
Run Code Online (Sandbox Code Playgroud)

问题是不同数据结构中的push方法需要不同数量的参数(有些需要优先级,有些则不需要).是否有一种优雅的方式来传递,并使"推"方法只需要从发送的参数列表中所需的args数量?

谢谢!

joa*_*uin 10

获取不同数量的参数并仍然能够选择正确参数的方法是使用*args和**keyword_args参数.来自Mark Lutz的Learning Python书:

*并且**,旨在支持带有任意数量参数的函数.两者都可以出现在函数定义或函数调用中,并且它们在两个位置具有相关的目的.

***在函数定义中

如果定义一个函数:

def f1(param1, *argparams, **kwparams): 
    print 'fixed_params -> ', param1
    print 'argparams  --> ', argparams
    print 'kwparams   ---->,', kwparams
Run Code Online (Sandbox Code Playgroud)

你可以这样称呼它:

f1('a', 'b', 'c', 'd', kw1='keyw1', kw2='keyw2')
Run Code Online (Sandbox Code Playgroud)

然后你得到:

fixed_params ->  a
argparams  -->  ('b', 'c', 'd')
kwparams   ---->, {'kw1': 'keyw1', 'kw2': 'keyw2'}
Run Code Online (Sandbox Code Playgroud)

这样您就可以发送/接收任意数量的参数和关键字.恢复关键字args的一个典型习惯如下:

def f1(param1, **kwparams):
    my_kw1 = kwparams['kw1']
    ---- operate  with my_kw1 ------
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以使用任意数量的参数调用您的函数,并使用它所需的函数.
这种类型或参数在某些GUI代码中经常使用,如wxPython类定义和子类,以及函数currying,decorators等

***在函数调用中

*并且**在函数调用时PARAMS采取的函数被解压:

def func(a, b, c, d):
    print(a, b, c, d)

args = (2, 3)
kwargs = {'d': 4}
func(1, *args, **kwargs)

### returns ---> 1 2 3 4 
Run Code Online (Sandbox Code Playgroud)

大!


Ble*_*der 0

不能只使用默认参数值吗?

>>> def foo(a, b = 10):
...   print a, b
... 
>>> foo(1000)
1000 10
>>> foo(1000, 1000)
1000 1000
>>>
Run Code Online (Sandbox Code Playgroud)

b如果未提供参数,则默认为10