我想做以下事情。
我想将函数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等分配值。实现此目的的最佳方法是什么?
答案 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')
答案 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_dict
而arg_dict = {'a': funcA(), 'b': funcB()}
yield
。< / p>