関数から2つの値を2つの別々の変数で返したいと思います。例えば:
def select_choice():
loop = 1
row = 0
while loop == 1:
print('''Choose from the following options?:
1. Row 1
2. Row 2
3. Row 3''')
row = int(input("Which row would you like to move the card from?: "))
if row == 1:
i = 2
card = list_a[-1]
Elif row == 2:
i = 1
card = list_b[-1]
Elif row == 3:
i = 0
card = list_c[-1]
return i
return card
そして私はこれらの値を別々に使用できるようにしたいと思います。私がreturn i, card
を使おうとしたとき、それはTuple
を返します、そして、これは私が欲しいものではありません。
2つの値を返すことはできませんが、Tuple
またはlist
を返して、呼び出し後に展開することができます。
def select_choice():
...
return i, card # or [i, card]
my_i, my_card = select_choice()
return i, card
行目でi, card
はタプルを作成することを意味します。 return (i, card)
のように括弧を使うこともできますが、タプルはコンマで作成されるので、親は必須ではありません。しかし、あなたはあなたのコードをもっと読みやすくしたり、Tupleを複数の行に分割するために親を使うことができます。同じことが行my_i, my_card = select_choice()
にも当てはまります。
3つ以上の値を返したい場合は、 という名前のTuple を使用することを検討してください。それは関数の呼び出し側が名前によって戻り値のフィールドにアクセスすることを可能にします。あなたはまだインデックスによってタプルのアイテムにアクセスすることができます。例えばSchema.loads
メソッドでは、Marshmallowフレームワークは UnmarshalResult
を返します。これは namedtuple
です。だからあなたはできる:
data, errors = MySchema.loads(request.json())
if errors:
...
または
result = MySchema.loads(request.json())
if result.errors:
...
else:
# use `result.data`
他の場合では、あなたはあなたの関数からdict
を返すかもしれません:
def select_choice():
...
return {'i': i, 'card': card, 'other_field': other_field, ...}
しかし、あなたはあなたのデータをラップするユーティリティクラスのインスタンスを返すことを考慮したいかもしれません:
class ChoiceData():
def __init__(self, i, card, other_field, ...):
# you can put here some validation logic
self.i = i
self.card = card
self.other_field = other_field
...
def select_choice():
...
return ChoiceData(i, card, other_field, ...)
choice_data = select_choice()
print(choice_data.i, choice_data.card)
関数から2つの値を2つの別々の変数で返したいと思います。
あなたはそれが呼び出し側でどのように見えると期待しますか? a = select_choice(); b = select_choice()
を書くことはできません。なぜならそれは関数を二度呼び出すからです。
値は「変数内に」返されません。それはPythonが機能する方法ではありません。関数は値(オブジェクト)を返します。変数は、与えられたコンテキストにおける値の単なる名前です。関数を呼び出して戻り値をどこかに代入するとき、あなたがしているのは呼び出し側コンテキストで受け取った値に名前を付けることです。この関数はあなたに代わって値を「変数に」入れるのではなく、代入がします(変数が値を「格納する」のではなく、単に名前になることを気にする必要はありません)。
私が
return i, card
を使おうとしたとき、それはTuple
を返します、そして、これは私が欲しいものではありません。
実際には、それはまさにあなたが望むものです。あなたがしなければならないのはTuple
を再び分解することです。
そして私はこれらの値を別々に使えるようにしたいのです。
Tuple
から値を取得するだけです。
これを行う最も簡単な方法は、解凍することです。
a, b = select_choice()
私はあなたが望むものがタプルだと思います。 return (i, card)
を使うと、次の2つの結果が得られます。
i, card = select_choice()
def test():
....
return r1, r2, r3, ....
>> ret_val = test()
>> print ret_val
(r1, r2, r3, ....)
今、あなたはあなたのタプルであなたが好きなことすべてをすることができます。
def test():
r1 = 1
r2 = 2
r3 = 3
return r1, r2, r3
x,y,z = test()
print x
print y
print z
> test.py
1
2
3
これは代替手段です。リストとして返す場合は、値を取得するのが簡単です。
def select_choice():
...
return [i, card]
values = select_choice()
print values[0]
print values[1]
Listを使って複数の値を返すこともできます。以下のコードを確認してください
def newFn(): #your function
result = [] #defining blank list which is to be return
r1 = 'return1' #first value
r2 = 'return2' #second value
result.append(r1) #adding first value in list
result.append(r2) #adding second value in list
return result #returning your list
ret_val1 = newFn()[1] #you can get any desired result from it
print ret_val1 #print/manipulate your your result