関数から 2 つの値を返すにはどうすればよいですか?
5 に答える
関数は単一の値のみを返すことができます。
複数の値をタプルにパックして返すのは簡単です
def f(x, y):
retval1 = x + y
retval2 = x * y
return retval1, retval2
返されたタプルを次のように解凍できます
sumval, prodval = f(5,7)
明らかに、関数から 2 つの値/オブジェクトを返すことはできません。ここで浮かび上がる概念は -> tuple packing
andtuple unpacking
です。
def foo():
return 'one','two'
a,b = foo()
ここで行っているのは、関数から値を返すときに、単一のタプル オブジェクトを使用していて、カンマ区切りの値 (ここでは string'one'
と'two'
) がタプルにパックされ、オブジェクトを含むタプルを返しているということです。(この概念を使用すると、必要な数のオブジェクトを返すことができます)。これはtuple packing
。
a
そして、関数を呼び出している間、変数名 (ここではと) を関連付けることによってこれらのタプル値を取得しています。b
これは と呼ばれtuple unpacking
ます。
def foo():
return 'foo','bar'
>> print foo()[0]
'foo'
>> print foo()[1]
'bar'
この関数は戻り値のタプルを返すため、通常のタプルと同じようにアクセスできます
関数は、値を含むことができるタプルを返すことができます。これにより、関数から複数の値を返すことができます。
たとえば、関数内の 2 つの値:
def blah():
a = 1
b = 2
そこから、これら 2 つの値を含むタプルを作成して返すことができます。
return (a,b)
これにより、変数に割り当てることができるタプルが返されます。
name1 = a
name2 = b
あなたの場合、おそらくこれをしたいでしょう:
return (h, defaults)
以下にいくつかのオプションを示します。
def a(): return 1, 2
def b(): return (1, 2)
def c(): return [1, 2]
def d(): return { 'value1': 1, 'value2': 2 }