我是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)
大!
不能只使用默认参数值吗?
>>> 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。
| 归档时间: |
|
| 查看次数: |
4869 次 |
| 最近记录: |