3秒でわかる
値を計算したり比べたりする記号や語句のこと。四則演算から比較や論理の判定まで、式の中で何をするのかを表すために使います。
もう少し詳しく
どういうものか
演算子は、値に対する操作を表す記号や語句です。足し算の +、比較の ==、論理積の and などが該当し、操作される値を被演算子と呼びます。演算子には優先順位と結合の向きが決まっており、括弧が無いときはその規則に従って計算されます。
種類はおおむね下のように分かれます。
| 種類 | 例 | 用途 |
|---|---|---|
| 算術 | + - * / // % ** | 数の計算 |
| 比較 | == != < >= | 真偽を返す |
| 論理 | and or not | 条件の組み合わせ |
| 代入 | = += *= | 変数への格納 |
| 所属 | in not in | 含まれるかの判定 |
なぜ必要か
条件分岐も繰り返しも、根本には「この式が真かどうか」という判定があります。演算子の意味と優先順位を取り違えると、書いたつもりの条件と実際に評価される条件がずれ、原因の見えない不具合になります。文法の中でも最初に正確さが要る部分です。
具体例
Python の割り算まわりは、他の言語から来ると誤解しやすい箇所です。
print(7 / 2) # 3.5 常に小数になる
print(7 // 2) # 3 小数点以下を切り捨てる
print(-7 // 2) # -4 負の数は小さい側へ丸められる
print(7 % 2) # 1 余り
print(2 ** 10) # 1024 べき乗
print(1 <= 5 < 3) # False 連続した比較が書ける
print("a" in "banana") # Trueつまずきやすいところ
代入の = と比較の == の取り違えは定番です。Python では if 文の中に = を書くと構文エラーになるので気づけますが、C 系の言語では条件式として通ってしまい、常に真になる分岐が生まれます。
切り捨ての向きも誤りやすい点です。-7 // 2 は -3 ではなく -4 になります。0 に近づける丸めではなく、小さい側へ寄せるためです。0 に向けて切り捨てたい場合は int() を使います。
小数の比較を == で行うのも避けます。0.1 + 0.2 == 0.3 は False です。誤差を許容する比較に置き換えてください。
覚え方
優先順位で迷ったら括弧を書きます。算術が比較より先、比較が論理より先、という大枠だけ覚えておき、それ以外は括弧で意図を明示するほうが、読む側にとっても安全です。not は and や or より強く結び付く点だけ、例外として意識しておく価値があります。書いた条件が意図どおりかは、真偽の組み合わせを紙に並べて確かめるのが確実です。