Python 三項演算子の使用方法

公開: 2023-01-04

このガイドでは、Python で三項演算子を使用する方法について説明します。 構文を学び、いくつかの例をコーディングして、それがどのように機能するかを理解します。

まず、if-else 条件ステートメントのしくみを確認してから、三項演算子を使用して同等の式を記述する方法を学習します。

次に、いくつかの例をコーディングしてから、Python のタプルと辞書を使用して Python の三項演算子の動作をエミュレートする方法を学びます。 最後に、三項演算子の使用を好む場合のいくつかの使用例を確認します。

さぁ、始めよう!

Python の If-Else ステートメント: レビュー

Python REPL を開始するか、Geekflare のオンライン Python エディターでコードを作成できます。

Python の if-else ステートメントの一般的な構文は次のとおりです。

 if condition: # do this else: # do this

上記のスニペットでは、 conditionはチェックする条件を示します。 条件がTrueと評価された場合、if ブロックがトリガーされます。 条件がFalseと評価された場合、else ブロック内のステートメントが実行されます。

これは、 energyの値がゼロ以下かどうかに応じて、 game_over変数にブール値が割り当てられる例です。

  • energy <= 0の場合、 game_overTrueです。
  • それ以外の場合、 game_overは False です。

次のコード スニペットは、if-else 条件ステートメントを使用してこれを行う方法を示しています。

 energy = -1 if energy <= 0: game_over = True else: game_over = False print(game_over) # True

この例では、 energyは 0 より小さい -1 です。したがって、 game_overは True です。

Python 三項演算子: 構文と例

python-三項演算子-1

Python には、C や C++ などの言語の三項条件演算子とよく似た働きをする三項演算子があります。 それを使用するための一般的な構文は次のとおりです。

 expression1 if condition else expression2

上記の構文を解析してみましょう。

  • condition : チェックする条件。
  • expression1 : 条件が True かどうかを評価する式。
  • expression2 : 条件が False であるかどうかを評価する式。

ここで、 if-else バージョンのコードから、 expression1expression2 、およびconditionを特定します。

三項演算子 ex1

すべてをまとめると、Python の三項演算子を使用して次のようになります。

 game_over = True if energy <= 0 else False print(game_over) # True

別の例をコーディングしましょう。 あなたが書店を経営していて、読者が過去 1 年間にあなたの店を訪れた頻度に応じて、読者に割引を提供するとします。

numVisitsが訪問数を表すとします。

  • numVisits > 7の場合、割引率、 discount_percは 20 です。
  • それ以外の場合、 discount_percは 5 です。

三項演算子を使用して、 discount_perc変数に値を割り当てます。

 numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (as numVisits = 10 which is > 7)

次に、Python タプルと辞書を使用して三項演算子をエミュレートする方法を学びます。

Python Tuple を使用した三項演算子のエミュレート

Python のすべてのイテラブルと同様に、タプルはゼロ インデックスに従います。 したがって、タプルに 2 つの要素がある場合、 tuple_name[0]はタプルの最初の要素を示し、 tuple_name[1]はタプルの 2 番目の要素を示します。

Python の基本的なデータ型は、integer、float、string、および Boolean です。 Python は型キャストをサポートしており、特定のデータ型を別のデータ型での同等の表現で表すことができます。

Python REPL を開始し、次の例を実行します。 整数をブール値に変換しようとすると、次のことがわかります。

  • bool(0)Falseです。
  • bool(<any non-zero integer>)Trueを返します。
 >>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True

同様に、ブール値を整数にキャストすると、次のようになります。

 >>> int(True) 1 >>> int(False) 0

型キャストとインデックス作成をまとめると、次のように実行できます。

  • タプルのインデックス 0 の要素: conditionFalseの場合に使用される値。
  • タプルのインデックス 1 の要素: conditionTrueの場合に使用される値。

上記を使用すると、次のようになります。

 >>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20

ここでは、 numVisitsが 10 であるため、条件numVisits > 7Trueです。int int(True)が 1 であるため、 discount_percの値は 20 であり、インデックス 1 の要素です。

Python Dictionary を使用した三項演算子のエミュレート

TrueFalseを辞書のキーとして設定できます。 また、 expression1 1 とexpression2 2 をそれぞれキーTrueFalseに対応する値として設定できます。

 some_dict = {True: expression1, False: expression2 }

次に何をしますか? some_dict[condition]を使用すると、 conditionTrueの場合、 Trueキーに対応するexpression1が評価されます。 また、 conditionFalseの場合、 expression2が評価されます。

discount_percの例を (再び) コーディングしてみましょう。ただし、今回は Python 辞書を使用します。

 >>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # 20

ここでは、 numVisits = 10であり、7 より大きいため、条件numVisits > 7Trueです。 したがって、 discount_dict[numVisits > 7]は、値 20 であるdiscount_dict[True]に評価されます。

常に Python 三項演算子を使用する必要がありますか?

Python 三項演算子を常に使用する必要があるかどうか

ここまでで、三項演算子の使い方を学びました。 しかし、常に三項演算子を使用する必要がありますか? まあ、三項演算子はすべてのユースケースに最適な選択ではないかもしれません。 このセクションは、if-else ステートメントよりも三項演算子の使用を優先する必要がある場合に分割されます。 また、三項演算子の代わりに if-else ステートメントの使用を検討すべき場合についても説明します。

If-Else ブロックよりも簡潔

前述のように、Python では、三項演算子式は if-else ステートメントよりも簡潔です。 したがって、これを使用して条件をチェックし、その場で条件付きで式を評価できます。

次の例では、 numsはランダムに生成された 100 個の整数のリストです。 100 個の数字のそれぞれについて、奇数か偶数かをチェックします。 そして、この評価は f-string 内でインラインで行われます。

 import random nums = [random.choice(range(100)) for i in range(10)] for num in nums: print(f"{num} is {'even' if num%2==0 else 'odd'}")
 # sample output 0 is even 56 is even 6 is even 53 is odd 62 is even 7 is odd 8 is even 77 is odd 41 is odd 94 is even

三項演算子には Else 句が必要です

if-else 条件ステートメントを使用している場合、else 句はオプションです。 例を見てみましょう。 energyがゼロ以下の値に低下した場合、 game_over変数はTrueに設定されます。

ただし、 energyがゼロより大きい場合、 game_over変数は初期化されません。 したがって、 game_over変数にアクセスしようとすると、エラーが発生します。

 energy = 5 if energy <= 0: game_over = True print(f"Is the game over? {game_over}")
 Traceback (most recent call last): File "ternary_op.py", line 39, in <module> print(f"Is the game over? {game_over}") NameError: name 'game_over' is not defined

これを修正する 1 つの方法は、最初にgame_overFalseに設定し、エネルギー レベルがゼロ以下の場合はTrueに更新することです。

 energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Is the game over? {game_over}")

ただし、上記と同等の Python 三項演算子を使用する場合、else 句はオプションではありません。 三項演算子では、 conditionFalseの場合に式を評価する必要があります。

 game_over = True if energy <= 0 else False

上記を、else 部分を削除してgame_over = True if energy <= 0に変更すると、次のように構文エラーが発生します。

 File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax

複数の条件を確認するには、If-Else ステートメントを使用します

例を考えてみましょう: 一連のコーディング インタビューの質問のすべての質問には、関連付けられた難易度スコアがあります。 このスコアに応じて、簡単、中、難しいの 3 つの難易度レベルのいずれかを特定の問題に割り当てます。 以下があるとします。

スコア難易度
10未満簡単
10 から 20 の間中くらい
20以上難しい

難易度スコアが与えられると、次のように Python 三項演算子を使用して難易度を取得できます。

 score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium

上記のコード ブロックの三項演算子式は、次の形式です。

 expression1 if condition1 else expression2 if condition2 else expression3

簡潔ですが、読んで解析するのは少し難しいです。 次の図は、この場合に制御フローがどのように発生するかを示しています。

三項演算子の例

次のコード スニペットは、if-else ステートメントを使用した同等の実装を示しています。 ご覧のとおり、制御フローははるかに理解しやすく、コードはより読みやすくなっています。

 if score < 10: difficulty_level="easy" elif score > 20: difficulty_level="hard" else: difficulty_level="medium" print(difficulty_level)

したがって、複数の条件がある場合は、三項演算子の代わりに if-else ブロックを使用する必要があります。 これにより、コードが読みやすく、理解しやすくなります。

また、条件が true か false かに応じて複数のステートメントを実行する必要がある場合は、if-else ステートメントの使用を検討する必要があります。

結論

このチュートリアルで学んだことの要約を次に示します。

  • Python では、次の構文で三項演算子を使用できexpression1 if condition else expression2
  • Python のタプルと辞書を使用して、三項演算子の動作をエミュレートできます。
  • 三項演算子は if-else ブロックのより簡潔な代替手段になる可能性がありますが、コードが読みやすいことを確認する必要があります。 コードの読みやすさを向上させるために、特に複数の条件をチェーンする必要がある場合は、三項演算子の代わりに if-else ステートメントを使用できます。

次に、Python の等値演算子と非等値演算子に関するチュートリアルを確認してください。