我有一个函数,根据不同的情况,我正在改变发送给我返回的结果的函数的参数。我想在方法中间确定参数,并且在函数的底部只有一个返回调用。请注意,这不是我的代码的样子,它只是一个例子。我正在使用Django,如果那是相关的。
if x:
return func(param1, param2, param3)
elif y:
return func(param4, param5, param6)
elif z:
return func(param7, param8, param9)
我想要阅读
if x:
parameters = (param1, param2, param3)
elif y:
parameters = (param4, param5, param6)
elif z:
parameters = (param7, param8, param9)
return func(parameters)
感谢您的帮助!
答案 0 :(得分:4)
只做
return func(*parameters)
它解压缩参数并将其传递给func
。阅读此内容的Python Docs条目。
例如 -
>>> def test(a, b, c):
print a, b, c
>>> testList = [2, 3, 4]
>>> test(*testList)
2 3 4
您的代码现在会读取 -
if x:
parameters = (param1, param2, param3)
elif y:
parameters = (param4, param5, param6)
elif z:
parameters = (param7, param8, param9)
return func(*parameters)
答案 1 :(得分:4)
使用*
与unpack the parameter tuple:
func(*parameters)
<强>演示:强>
def func(x,y,z):
print x,y,z
>>> params = (1,2,3)
>>> func(*params)
1 2 3
>>> params = (4,5,6)
>>> func(*params)
4 5 6
答案 2 :(得分:1)
有一种pythonic方法,这有点漂亮:
paramDictionary = { x : (param 1, param 2, param 3), y : (...), z:(...) }
return func( *paramDictionary[ indicator ] )
这往往是python中更整洁的代码。您仍然使用*来解压缩变量,但是您不需要使用if语句的漫无边际的行!
答案 3 :(得分:0)
你能不能简单地做到
return func(parameters[0], parameters[1], parameters[2])