Python演算子の徹底解説

演算の基本概念として、1+2=3という式では1と2が被演算子、+が演算子となります。

算術演算子

Pythonにおける算術演算子は整数や浮動小数点数の演算を扱い、一項演算子と二項演算子に分類されます。

一項算術演算子

演算子 説明
**-** 符号反転

以下コードを実行してください:

val = 9
result = -val
print(val)

実行結果:

二項算術演算子

演算子 機能
+ 加算
- 減算
* 乗算
/ 除算
% 剰余
** べき乗
// 商の整数部取得(**切り下げ**)

以下コードを実行してください:

num1 = 10
num2 = 5
print(num1+num2)
print(num1-num2)
print(num1*num2)
print(num1/num2)
print(num1%num2)
print(num1**num2)
num1 = -9
num2 = 2
print(num1//num2)

実行結果:

注意点:

  1. 文字列の加算は連結処理となる(数字文字列でも同様)
  2. 文字列と他の型の加算はエラーを発生させる
  3. 除算結果は1小数以下の浮動小数点型となる
  4. 除数に0を指定するとZeroDivisionErrorが発生
  5. 文字列×整数は繰り返し処理となる
  6. Pythonでは++や--のようなインクリメント演算子は存在しない
  7. divmod()関数を使用すると商と余りを同時に取得できる。例:divmod(13,3) → (4,1)

以下コードを実行してください:

str1 = 'aaa'
str2 = 'bbb'
print(str1+str2)
str1 = '20'
str2 = '30'
print(str1+str2)
print(type(str1+str2))
str1 = 'hello'
print(str1*3)

実行結果:

比較演算子

2つの式の大小比較を行う。戻り値はBoolean型(True/False)となる。

演算子 説明
== a==b 等価判定(基本型は値比較、参照型は同一オブジェクト判定)
!= a!=b 非等価判定
> a>b aがbより大きい場合True
< a<b aがbより小さい場合True
>= a>=b aがb以上の場合True
<= a<=b aがb以下の場合True

Python3では「<>」演算子は廃止されている。

以下コードを実行してください:

str1 = 'Hello'
str2 = 'Hello'
print(str1==str2)
list1 = []
list2 = [1,2]
print(list1==list2)
print(list1&lt;list2)

実行結果:

論理演算子

Boolean型の引数に対する演算を行う。戻り値はBoolean型となる。

演算子 名称 説明
not 論理否定 not x xがTrue→False、False→True
and 論理積 x and y 両方Trueの時のみTrue
or 論理和 x or y どちらかがTrueの時True

注意点: 短絡評価の仕様により、x and yではxがFalseの場合はyを評価せずFalseを返す。x or yではxがTrueの場合はyを評価せずxを返す。

ビット演算子

2進数単位での演算を行う。操作対象と結果は整数型となる。

演算子 名称 説明
~ ビット反転 ~x 各ビットを反転(0→1、1→0)
& ビットAND x&y 共に1のビットのみ1
| ビットOR x|y どちらかが1のビットを1
^ ビットXOR x^y 異なるビットのみ1
>> 右シフト x>>n nビット右にシフト(2のn乗で除算相当)
<< 左シフト x<<n nビット左にシフト(2のn乗で乗算相当)

以下コードを実行してください:

val1 = 0b10110010
val2 = 0b01011110
print("val1 | val2 = {0}".format(val1|val2))  #0b11111110
print("val1 & val2 = {0}".format(val1&val2))  #0b00010010
print("val1 ^ val2 = {0}".format(val1^val2))  #0b11101100
print("~val1 = {0}".format(~val1))            #-179
num = 10
print("num &gt;&gt;2 = {0}".format(num>>2))
print("num &lt;&lt;2 = {0}".format(num<<2))

実行結果:

代入演算子

変数の自己更新を簡潔に記述するための記法。

演算子 名称 説明
+= 加算代入 a += b a = a +b
-= 減算代入 a -= b a = a - b
*= 乗算代入 a *= b a = a*b
/= 除算代入 a /= b a = a/b
%= 剰余代入 a %= b a = a%b
**= べき乗代入 a **= b a = a**b
//= 床除算代入 a //= b a = a // b
&= ビットAND代入 a &= b a = a&b
|= ビットOR代入 a |= b a = a|b
^= ビットXOR代入 a ^= b a = a^b
<<= 左シフト代入 a <<=b a = a<<b
>>= 右シフト代入 a >>=b a = a>>b

以下コードを実行してください:

val1 = 1
val2 = 2
val1 += val2
print("val1 + val2 = {0}".format(val1))
val1 -= val2
print("val1 - val2 = {0}".format(val1))
val1 *= val2
print("val1 * val2 = {0}".format(val1))
val1 /= val2
print("val1 / val2 = {0}".format(val1))

val1 = 0b1100
val2 = 0b1100
val1 |=val2
print("val1 | val2 = {0}".format(val1))
val1 ^=val2
print("val1 ^ val2 = {0}".format(val1))

実行結果:

その他の演算子

同一性判定演算子

オブジェクトの同一性を判定する。==演算子との違いは、==は値比較に対し、is/is notは同一オブジェクト判定を行う点である。

演算子 説明
is a is b 同一オブジェクトか判定
is not a is not b 同一オブジェクトでないか判定

要素包含判定演算子

シーケンス型に要素が含まれるか判定する。

以下コードを実行してください:

str1 = 'Hello'
str2 = 'Hello'
print(str1 is str2)
print('e' in str1)
print('hello' in str1)

実行結果:

演算子優先順位

複雑な式評価において優先順位が重要となる。大まかな優先順位は「算術→ビット→比較→論理→代入」の順となる。以下は優先度順位表。

順位 演算子 説明
1 () 括弧
2 f(引数) 関数呼び出し
3 [start:end],[start:end:step] スライス
4 [index] 添字アクセス
5 . クラスメンバアクセス
6 ** べき乗
7 ~ ビット反転
8 + 正負符号
9 * / % 乗算/除算/剰余
10 + 加算/減算
11 >> << ビットシフト
12 & ビットAND
13 ^ ビットXOR
14 | ビットOR
15 in not in is is not < <= > >= != == 比較演算子
16 not 論理否定
17 and 論理積
18 or 論理和
19 lambda ラムダ式

タグ: 算術演算子 論理演算子 ビット演算子 代入演算子 比較演算子

6月28日 02:29 投稿