Menu

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

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

このページのコードはエディタで実行できます — 編集してすぐに結果を確認できます。

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

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

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

算術演算子

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

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

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

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

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

比較演算子

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

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

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

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

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

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

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

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

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

代入演算子

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

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

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

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

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

同一性の判定: isis not

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

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

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

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

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

セイウチ演算子 (:=)

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

セイウチ演算子を使わない場合、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 programming languages illustration

Coddyでコードを学ぼう

始める