7

我有一个函数,根据不同的情况,我正在更改发送到要返回其结果的函数的参数。我只想在方法的中间决定参数,并且在我的函数底部只有一个返回调用。请注意,这不是我的代码的样子,它只是一个示例。如果相关的话,我正在使用 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)

谢谢您的帮助!

4

4 回答 4

5

用于*包参数元组

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
于 2013-07-08T17:33:47.407 回答
4

做就是了

return func(*parameters)

它解包参数并将其传递给func. 阅读有关此的Python 文档条目。

例如 -

>>> 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)
于 2013-07-08T17:33:36.853 回答
1

有一种非常漂亮的pythonic方法:

paramDictionary = { x : (param 1, param 2, param 3), y : (...), z:(...) }
return func( *paramDictionary[ indicator ] )

这往往是 python 中更整洁的代码。您仍在使用 * 来解压缩变量,但您不需要漫无边际的 if 语句!

于 2013-07-08T17:36:33.560 回答
0

你能不能简单地做

return func(parameters[0], parameters[1], parameters[2])

?

于 2013-07-08T17:34:23.353 回答