gpt4 book ai didi

python - python 中的通用函数 - 调用参数数量未知的方法

转载 作者:太空狗 更新时间:2023-10-29 21:27:13 24 4
gpt4 key购买 nike

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

我正在实现一个接受参数“边缘”的通用搜索函数,它可以是多种类型的数据结构。

在搜索方法中我有一行:

 fringe.push(item, priority)

问题在于不同数据结构中的 push 方法采用不同数量的参数(有些需要优先级,有些则不需要)。有没有一种优雅的方法来传递它并使“推送”方法只从发送的参数列表中获取它需要的参数数量?

谢谢!

最佳答案

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

* and **, are designed to support functions that take any number of arguments. Both can appear in either the function definition or a function call, and they have related purposes in the two locations.

函数定义中的

***

如果你定义一个函数:

def f1(param1, *argparams, **kwparams): 
print 'fixed_params -> ', param1
print 'argparams --> ', argparams
print 'kwparams ---->,', kwparams

你可以这样调用它:

f1('a', 'b', 'c', 'd', kw1='keyw1', kw2='keyw2')

然后你得到:

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

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

def f1(param1, **kwparams):
my_kw1 = kwparams['kw1']
---- operate with my_kw1 ------

通过这种方式,您的函数可以使用任意数量的参数来调用,并且它会使用它需要的参数。
这种类型或参数经常用于某些 GUI 代码,例如 wxPython 类定义和子类化,以及函数柯里化(Currying)、装饰器等

*** 在函数调用中

*** 函数调用中的参数在被函数获取时解包:

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

太棒了!

关于python - python 中的通用函数 - 调用参数数量未知的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8147737/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com