質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

785閲覧

Python 複数のリターン値の参照処理をシンプルな参照方法への改善について

lemonesour

総合スコア25

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/12/09 02:38

■環境
Python2.4

■やりたいこと
以下の様に関数のリターン値を参照し、Falseの場合、raiseを発生させる箇所が複数(冗長)ある場合、
どのようにすれば、シンプルなつくり(非冗長)にできるか、ご教授いただきたく。

python

1def main(): 2 result = True 3 result = func_a() 4 if result == False: 5 raise SystemError() 6 7 result = func_b() 8 if result == False: 9 raise SystemError() 10 11 result = func_c() 12 if result == False: 13 raise SystemError() 14 return 0 15

■試したこと

python

1def check(result): 2 if result == False: 3 raise SystemError() 4 5def main(): 6 result = True 7 result = func_a() 8 check(result) 9 10 result = func_b() 11 check(result) 12 13 result = func_c() 14 check(result) 15 return 0

こちらもcheck関数の呼び出しが、冗長なつくりかと。

ご教授の程、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2021/12/09 04:38

エラーじゃない時はTrue(か、確実に真だといえる値)が返ってくるんでしょうか?
guest

回答3

0

funk_aの応答がFalseのときにfunk_bを実行したくないのであれば、現状の表現に冗長性は無いと思うので、これ以上簡略化できないと思います。

投稿2021/12/09 03:02

TakaiY

総合スコア12765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

以下です。

python

1def main(): 2 if func_a() and func_b() and func_c(): 3 return 0 4 raise SystemError()

これで動作するのはand演算子は、左側の式が偽になった場合には右側の式を評価(実行)しないからです。

詳しくは、公式ドキュメント 6.11. ブール演算 (boolean operation)をお読みください。

投稿2021/12/09 04:17

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lemonesour

2021/12/10 08:37

ppaul様 いつもありがとうございます。 ご提示いただいたコードを参考にさせていただきます。 今後ともよろしくお願いいたします。
guest

0

result値を使用していないのと、func_a, b, cが引数無しなので all(もしくはany)を使って、全ての実行結果がTrueかどうかを確認する方式でも十分ではないでしょうか。

python

1def func_a(): 2 print('a') 3 return True 4 5def func_b(): 6 print('b') 7 return False 8 9def func_c(): 10 print('c') 11 return True 12 13def main(): 14 if all(f() for f in (func_a, func_b, func_c)): 15 return 0 16 else: 17 raise SystemError() 18 19main()

投稿2021/12/09 03:02

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問