1. ホーム
  2. python

[解決済み] if-elif-else文を1行にまとめる?

2022-04-14 21:51:24

質問

以下のリンクを読みましたが、私の質問には答えてくれません。

Pythonに三項条件演算子はありますか? (if-else文を1行に凝縮するための質問です。)

if-elif-else 文を1行に収まるように簡単に書く方法はありますか?

例えば

if expression1:
   statement1
elif expression2:
   statement2
else:
   statement3

実際の例でもいい。

if i > 100:
    x = 2
elif i < 100:
    x = 1
else:
    x = 0

ただ、上の例を次のように書けば、もっと簡潔な感じになるような気がします。

x=2 if i>100 elif i<100 1 else 0 [WRONG]

解決方法は?

いいえ、それは不可能です(少なくとも任意のステートメントでは)し、望ましいことでもありません。すべてを1行に収めると、ほとんどの場合、次のような違反になります。 PEP-8 行の長さが80文字を超えないようにすることが義務付けられています。

また、Pythonの禅にも反しています: "読みやすさが大事"。 (タイプ import this をPythonのプロンプトで表示すると、全文が読めます)。

あなたは できる Pythonでは3項式が使えますが、式に対してのみで、文に対しては使えません。

>>> a = "Hello" if foo() else "Goodbye"

編集する

修正された質問では、代入される値を除いて3つの文が同じであることがわかりました。この場合、三項演算子は連鎖しますが、やはり可読性は低くなると思います。

>>> i=100
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
0
>>> i=101
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
2
>>> i=99
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
1