Menu
日本語

Pythonの演算子まとめ|算術・比較・論理・in・is

Pythonの演算子を一気に整理。算術・比較・論理・代入・メンバーシップ(in)・同一性(is)まで、実例付きで使い分けがわかります。

演算子は「動作を表す記号」にすぎない

Python の演算子とは、Python に何らかの処理を指示する記号(または短いキーワード)のことです。2 つの値を足したり、比較したり、片方がもう片方を含んでいるかを調べたり──そんな役割を担います。基本的な数学記号はすでにお馴染みだと思いますが、Python にはそれ以外にも、論理・包含・同一性を扱うための演算子がいくつか用意されています。

ここからは、主要なカテゴリを順番に見ていきましょう。

算術演算子

おなじみの四則演算に加えて、Python ならではの演算子もいくつかあります。

main.py
Output
Click Run to see the output here.

このリストの中で、うっかり忘れがちなポイントが2つあります。

  • / は両辺が整数でも float を返します。 10 / 2 の結果は 5.0 です。整数で割り算したいときは // を使いましょう。
  • % は剰余(余り)を求める演算子です。 n が偶数かどうかを判定するなら、n % 2 == 0 が一番スッキリ書けます。

演算子の優先順位は一般的な数学のルールと同じです。** が最も強く、次に */、最後に +- の順で結合します。もちろん、カッコを使えばこの順序を上書きできます。

main.py
Output
Click Run to see the output here.

疑わしいときはカッコを積極的に使いましょう。コストはゼロですし、意図がはっきりします。

比較演算子

比較演算子は6種類あり、どれも真偽値(bool)を返します。

main.py
Output
Click Run to see the output here.

Pythonでは比較演算子を 連結 して書けます。これは他の言語ではあまり見ない、便利な書き方です。

main.py
Output
Click Run to see the output here.

これは「age が 18 以上かつ 65 未満」と読めますね。内部的には 18 <= age and age < 65 と同じですが、こちらの書き方のほうが数式に近くて読みやすいです。

論理演算子(and / or / not)

Python の論理演算子は記号ではなく、英単語そのままで書きます。

main.py
Output
Click Run to see the output here.

知っておくと得する細かい話が2つあります。

短絡評価(ショートサーキット評価) and は最初に falsy な値が出た時点で評価を止め、or は最初に truthy な値が出た時点で打ち切ります。左辺だけで結果が決まるなら、右辺は評価すらされません。この性質を使うと、エラーを安全に回避できます。

main.py
Output
Click Run to see the output here.

and/orTrue/False ではなく、実際の値を返します。 結果を決めた側のオペランドがそのまま返ってくるイメージです。

main.py
Output
Click Run to see the output here.

実際のコードでは name = user_input or "anonymous" のような書き方をよく見かけますが、これはこの挙動を利用したデフォルト値設定の定番パターンです。

代入演算子

= は値を代入します。複合代入演算子は、演算と代入をまとめて行います。

main.py
Output
Click Run to see the output here.

複合代入は文字列 (s += "more") やリスト (lst += [4, 5]) でも使えます。速くなるわけではなく、単に書く量が減るだけです。

メンバーシップ判定: innot in

値がコンテナの中に含まれているかを調べる in 演算子です:

main.py
Output
Click Run to see the output here.

in はあらゆるイテラブルで使えます。リスト、タプル、セット、文字列、辞書などなんでもOKです。ただし、大きなデータで検索する場合、リストに対する in は O(n) ですが、セットや辞書なら O(1) になります。何度もメンバーシップを判定するような場面では、この違いが効いてきます。

同一性の判定: isis not

is は値が等しいかではなく、2つの変数が同じオブジェクト(メモリ上の同じ実体)を指しているか をチェックします。

main.py
Output
Click Run to see the output here.

== を使う場面がほとんどです。is が本当に活きるのは、NoneTrueFalse と比較するときくらいです:

main.py
Output
Click Run to see the output here.

コミュニティの慣習として、== None ではなく is None を使うのが鉄則です。is True も同様ですが、こちらを書く機会はほとんどありません。

ビット演算子(初読時は読み飛ばしてOK)

Python にはビット演算子(&|^~<<>>)もあり、整数のビットを1つずつ操作できます。暗号処理や低レイヤのネットワーク、特定のアルゴリズムでは役立ちますが、最初に読むときは気にしなくて大丈夫です。

セイウチ演算子 (:=)

Python 3.8 で追加された := は、値の代入と返却を1つの式でまとめて行える演算子です。処理結果を変数に取り込みつつ、その場で条件判定したい場面で便利です。

main.py
Output
Click Run to see the output here.

セイウチ演算子を使わない場合、len(numbers) を2回呼ぶか、1行余分に書くことになります。必須の機能ではないので、重複を減らせる場面だけで使うのが吉です。

python 演算子の優先順位チートシート

実際によく使う演算子を、結合の強い順(優先度の高い順)に並べるとこうなります。

  1. ** — べき乗
  2. *///% — 乗算・除算系
  3. +- — 加算・減算
  4. <<=>>===!= — 比較
  5. not
  6. and
  7. or

迷ったら素直にカッコで囲みましょう。トリッキーに書くより、読みやすさを優先したほうが結局得します。

次は制御フローへ

演算子を一通り押さえたら、あとは条件式が書けるようになります。次のページで扱うのは if / elif / else です。演算子の評価結果に応じて、プログラムが進む道を分岐させる仕組みですね。

よくある質問

Pythonの演算子にはどんな種類がありますか?

大きく分けて6種類です。算術演算子(+, -, *, /, //, %, **)、比較演算子(==, !=, <, <=, >, >=)、論理演算子(and, or, not)、代入演算子(=, +=, -= など)、メンバーシップ演算子(in, not in)、同一性演算子(is, is not)があります。

==is はどう違うの?

== は「値が等しいか」を調べる演算子、is は「メモリ上でまったく同じオブジェクトを指しているか」を調べる演算子です。NoneTrueFalse はシングルトンなので is で比較するのが定番(if x is None: のように書く)。それ以外の値の比較はほぼ == でOKです。

Pythonの % 演算子は何をするもの?

数値に対しては剰余(あまり)を返す演算子です。たとえば 17 % 52 になります。文字列に使うと古いスタイルのフォーマット("hello %s" % name のような書き方)になりますが、今はほとんどの場面で f-string に置き換わっています。

Coddyでコードを学ぼう

始める