[解決済み】Pythonで関数から2つの値を返すにはどうすればいいですか?
2022-04-11 21:17:22
質問
ある関数から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)
しかし、タプルはカンマで生成されるので、ペレンは必須ではありません。しかし、コードを読みやすくするため、あるいはタプルを複数行に分割するために、ペレンを使用することができます。同じことが、行
my_i, my_card = select_choice()
.
2つ以上の値を返したい場合は
という名前のタプル
. これにより、関数の呼び出し元は返される値のフィールドに名前でアクセスできるようになり、より読みやすくなります。タプルの項目にはインデックスでアクセスすることもできます。例えば
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, ...}
しかし、データをラップしたユーティリティクラス(またはPydantic/dataclassモデルのインスタンス)のインスタンスを返すことを考慮したいかもしれません。
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)
関連
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】DataFrameのコンストラクタが正しく呼び出されない!エラー
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】 TypeError: += でサポートされていないオペランド型: 'int' および 'list' です。