wiki:PythonIntroThree

Version 3 (modified by sgk, 13 years ago) (diff)

--

Python:三項演算子が無い

Python情報 >> Pythonを学ぶ人に

三項演算子は無いんです。僕らの大好きな三項演算子が。 つまり、C言語で言うところの「条件?真の場合の値:偽の場合の値」という式を書くことはできません。 三項演算子があれば、ちょっとした冗長な処理を、スマートに短くシンプルに書くことができるのに…。 C言語から来た人はきっと同意してくれるでしょう。

Pythonを設計した人は、きっとこんなふうに考えたのでしょう。

  • 三項演算子があると、式が複雑でわかりづらくなるばかりだ。
  • 「~?~:~」という書き方は、記号に対して非常に恣意的な意味づけをしていて、C言語系の言語を知らない人にはわからない。
  • 三項演算子が無くても、「if~:~else:~」文で書けばいいじゃないか。

ま、確かにね。

そうは言っても、三項演算子が有りさえすれば1行10文字くらいで書けるはずが、if-elseで4行になるというのはなかなか許せなくて、Pythonプログラマのみなさんはたいてい、ちょっとした裏技を使います。

x = 条件 and 真の場合の値 or 偽の場合の値

これ、三項演算子と「ほぼ」同じに働きます。 え?なぜ?&&が無いのページの説明をよく読めばわかります。 ただし、ちょっとだけ問題があります。 「真の場合の値」が偽だった場合に、条件によらず必ず「偽の場合の値」が選ばれてしまいます。 こういうわかりづらい問題があるため、この書き方は初心者の方にはお勧めしません。

三項演算子が追加されます

って、さんざん「三項演算子は無い」と説明してきましたが、今度リリースされるPython 2.5から、三項演算子が追加されるそうです。 三項演算子の追加の詳細はここで解説されています(英文)。 こんな構文になるんだそうです。

x = 真の場合の値 if 条件 else 偽の場合の値

うわわ。順番が違う。Pythonの設計してる人がヒネくれてるとか、いちいち独自性を追求したいというわけではないようです。 慣習にとらわれることなく、習得のしやすさ、使いやすさ、Pythonインタプリタの実装のしやすさを考えたらこのようになったということなんでしょう。C言語出身の人はちょっと悩むかもしれませんね。