1

Python で、可変数の戻り値を持ち、簡単に処理できる関数を作成したいと考えています。何かのようなもの

def test(a):
    if a > 0:
        return True
    else:
        return False, 123, 'foo'

のように使用できます

out = test(-5)

ただし、ここで見られる欠点は、ユーザーが戻り引数がタプルであるかどうかを確認し、それに応じて行動する必要があることです。戻り値の意味はあまり明確ではありません。

バリアントは、戻り値として辞書を使用することですが、コードでこれを見たことがないので、少しハックな気がします。

コードを整理するためのより良い方法はありますか?

4

2 に答える 2

3

戻り値が互いに一貫して使用できる型であることを常に確認してください。

Python では、関数の型は暗黙的です。これは、プログラマーが任意の型の関数を作成できることを意味します (これは素晴らしいことです) が、プログラマーは型を慎重に選択する必要があることを意味します。要するに、戻り値の型を docstring に記述する必要があります。それが悪い考えのように聞こえる場合や、使用するのが難しい関数である場合は、そうです。

ここで正しいのは次のいずれかです。

def test(a):
    ''' Always returns a 3-tuple, composed of Flag,data,data. Data may be None '''
    if a > 0:
        return True, None, None
    else:
        return False, 123, 'foo'

flag,data1,data2 = test(a)

また

def test(a):
    ''' Always returns a tuple, composed of a Flag, followed by 0 or more data items '''
    if a > 0:
        return True,
    else:
        return False, 123, 'foo'

return = test(a)
flag,rest = return[0],return[1:]
for x in rest: print x
于 2013-09-10T17:24:22.577 に答える
3

ただし、ここで見られる欠点は、ユーザーが戻り引数がタプルであるかどうかを確認し、それに応じて行動する必要があることです。戻り値の意味はあまり明確ではありません。

このようなシナリオではtuple、戻り値の型の処理と一貫性を保つ を常に返します。

>>> def test(a):
    if a > 0:
        return True,
    else:
        return False, 123, 'foo'

>>> out = test(-5)
>>> out
(False, 123, 'foo')
>>> out = test(1)
>>> out
(True,)
于 2013-09-10T16:45:01.230 に答える