有一个简单的方法在python函数中有可选的输出参数吗?

时间:2016-05-02 23:44:43

标签: python

我想做以下事情。

我想将函数func()定义为:

def func(**kwargs):
    if 'a' in kwargs:
        a = funcA()
    if 'b' in kwargs:
        b = funcB()
    ...

def func(**kwargs):
    if 'a' in kwargs:
        kwargs['a'] = funcA()
    if 'b' in kwargs:
        kwargs['b'] = funcB()
    ...

其中funcA()和funcB()在别处定义。我想用函数func()调用可变数量的参数:

>>> func(a = x)
>>> func(b = y)
>>> func(a = x, b = y)
...

这些调用应该为x,y等分配值。实现此目的的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

您不能通过分配这样的参数来修改调用者的变量,您需要使用return语句返回一个值,并且调用者可以分配回变量。

def func(**kwargs):
    if 'a' in kwargs and 'b' in kwargs:
        return (funcA(kwargs['a']), funcB(kwargs['b']))
    elseif 'a' in kwargs:
        return funcA(kwargs['a'])
    elseif 'b' in kwargs:
        return funcB(kwargs['b'])

a = func(a = a)
b = func(b = b)
a, b = func(a = a, b = b)

更通用,可扩展的方法是返回字典。

def func(**kwargs):
    retval = {}
    if 'a' in kwargs:
        retval['a'] = funcA(kwargs['a'])
    if 'b' in kwargs:
        retval['b'] = funcB(kwargs['b'])
    return retval

a = func(a = a)['a']
b = func(b = b)['b']
vals = func(a = a, b = b)
a = vals['a']
b = vals['b']

答案 1 :(得分:0)

您在调用func时使用位置参数,但未传入**kwargs

相反,您还必须为func指定关键字参数。

像这样:

def func(**kwargs):
    if 'a' in kwargs:
        funcA(kwargs['a'])
    if 'b' in kwargs:
        funB(kwargs['b'])

然后:

func(a='hello')
func(b='thing')
func(a='hello', b='thing')

请参阅positional and keyword arguments的文档。

答案 2 :(得分:0)

作为一种通用方法,为了拒绝编写多个Adapter条件,最好使用它们的相对函数创建参数的字典,然后在将预期参数传递给函数调用者时对相对函数进行分类: / p>

if

此函数将返回一个生成器,其中包含参数的相对函数值。

请注意,如果您不想传递参数的值而不是前面提到的def func(**kwargs): arg_dict = {'a': funcA, 'b': funcB} for arg, value in kwargs.items(): try: yield arg_dict.get(arg)(value) except TypeError: # do stuff or just pass ,则应使用arg_dictarg_dict = {'a': funcA(), 'b': funcB()} yield。< / p>