1. ホーム
  2. パイソン

[解決済み】Pythonに三項条件演算子はありますか?

2022-04-15 09:56:02

質問

もしPythonが 三項演算子 他の言語構造を使ってシミュレーションすることは可能ですか?

どのように解決するのですか?

はい、そうです。 追加 をバージョン2.5でリリースしました。式の構文は次のとおりです。

a if condition else b

最初 condition が評価され、次にどちらか一方が評価されます。 a または b に基づいて評価され、返されます。 ブーリアン の値は condition . もし condition と評価されます。 True であれば a が評価されて返されますが b が無視される場合、あるいは b が評価されて返されますが a は無視されます。

というのは、ショートさせることができるからです。 condition が真である場合のみ a が評価され b は全く評価されませんが condition が偽の場合のみ b が評価され a は全く評価されない。

例えば

>>> 'true' if True else 'false'
'true'
>>> 'true' if False else 'false'
'false'

なお、条件文は 表現 ではなく ステートメント . つまり、代入文や pass またはその他の ステートメント 条件付き 表現 :

>>> pass if False else x = 3
  File "<stdin>", line 1
    pass if False else x = 3
          ^
SyntaxError: invalid syntax

しかし、条件式を使って、このように変数を代入することができます。

x = a if True else b

条件式は、2つの値を切り替えるものと考えてください。一つの値か別の値か」という状況にあるときには非常に便利ですが、それ以外のことはあまりできません。

ステートメントを使用する必要がある場合は、通常の if ステートメント の代わりに、条件付きの 表現 .


いくつかの理由から、一部の Pythonist たちから嫌われていることを心に留めておいてください。

  • 引数の順番が古典的な condition ? a : b 他の多くの言語の三項演算子(例えば C , C++ , 囲碁 , パール , ルビー , Java , ジャバスクリプト など)、Pythonの"amazing"な挙動に慣れていない人が使うとバグにつながるかもしれません(彼らは引数の順番を逆にするかもしれません)。
  • 通常の思考の流れ(条件を先に考え、その後に効果を考える)に反するため、「扱いにくい」と感じる人がいる。
  • スタイル上の理由。(ただし、「インライン if ' にすることができます。 本当に は便利で、スクリプトをより簡潔にすることができますが、実際にはコードを複雑にしてしまいます)。

もし、順番を覚えるのが大変なら、声に出して読むときは、(ほとんど)言いたいことを言うということを思い出してください。例えば x = 4 if b > 8 else 9 は、次のように音読します。 x will be 4 if b is greater than 8 otherwise 9 .

公式ドキュメントです。