7

さまざまなケースに基づいて、結果を返す関数に送信されるパラメーターを変更する関数があります。メソッドの途中でパラメーターを決定し、関数の最後にリターン呼び出しを 1 つだけ設定したいと考えています。これは私のコードがどのように見えるかではないことに注意してください。これは単なる例です。関連する場合は、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 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)
于 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 に答える