Python3 演算子


演算子とは?

この章では主にPythonの演算子について説明します。

簡単な例を挙げます:

4 + 5 = 9

例の中で、4と5と呼ばれますオペランド,+と呼ばれます演算子。

Python言語は以下の種類の演算子をサポートしています:

次に、Pythonの演算子を一つずつ学んでいきましょう。


Python算術演算子

以下、変数はa=10、変数はb=21:

演算子説明例
+加算 - 2つのオブジェクトを加算するa + b は結果 31 を出力
-減算 - 負の数、またはある数から別の数を引くa - b は結果 -11 を出力
*乗算 - 2つの数を掛ける、または繰り返された文字列を返すa * b は結果 210 を出力
/除算 - x を y で割るb / a は結果 2.1 を出力
%剰余 - 除算の余りを返すb % a は結果 1 を出力
**べき乗 - x の y 乗を返すa**b は 10 の 21 乗
//切り捨て除算 - 小さい方向に整数を取る
>>> 9//2
4
>>> -9//2
-5

以下の例は、Pythonのすべての算術演算子の操作を示しています:

例(Python 3.0+)

#!/usr/bin/python3 a = 21 b = 10 c = 0 c = a + b print ("1 - c の値は:", c) c = a - b print ("2 - c の値は:", c) c = a * b print ("3 - c の値は:", c) c = a / b print ("4 - c の値は:", c) c = a % b print ("5 - c の値は:", c) # 変数 a、b、c を変更 a = 2 b = 3 c = a**b print ("6 - c の値は:", c) a = 10 b = 5 c = a//b print ("7 - c の値は:", c)

上記の例の出力結果:

1 - c 的值为: 31
2 - c 的值为: 11
3 - c 的值为: 210
4 - c 的值为: 2.1
5 - c 的值为: 1
6 - c 的值为: 8
7 - c 的值为: 2

Python比較演算子

以下、変数 a は 10、変数 b は 20 とします:

演算子説明例
==等しい - オブジェクトが等しいかどうかを比較する(a == b) は False を返す。
!=等しくない - 2つのオブジェクトが等しくないかどうかを比較する(a != b) は True を返す。
>より大きい - x が y より大きいかどうかを返す(a > b) は False を返す。
<より小さい - x が y より小さいかどうかを返す。すべての比較演算子は真のとき 1、偽のとき 0 を返します。これはそれぞれ特別な変数 True と False に相当します。これらの変数名が大文字であることに注意してください。(a < b) は True を返す。
>=以上 - x が y 以上かどうかを返す。(a >= b) は False を返す。
<=以下 - x が y 以下かどうかを返す。(a <= b) は True を返す。

以下の例は、Pythonのすべての比較演算子の操作を示しています:

例(Python 3.0+)

#!/usr/bin/python3 a = 21 b = 10 c = 0 if ( a == b ): print ("1 - a は b と等しい") else: print ("1 - a は b と等しくない") if ( a != b ): print ("2 - a は b と等しくない") else: print ("2 - a は b と等しい") if ( a < b ): print ("3 - a は b より小さい") else: print ("3 - a は b 以上") if ( a > b ): print ("4 - a は b より大きい") else: print ("4 - a は b 以下") # 変数 a と b の値を変更 a = 5 b = 20 if ( a <= b ): print ("5 - a は b 以下") else: print ("5 - a は b より大きい") if ( b >= a ): print ("6 - b は a 以上") else: print ("6 - b は a より小さい")

上記の例の出力結果:

1 - a 不等于 b
2 - a 不等于 b
3 - a 大于等于 b
4 - a 大于 b
5 - a 小于等于 b
6 - b 大于等于 a

Python代入演算子

以下、変数 a は 10、変数 b は 20 とします:

演算子説明例
=単純代入演算子c = a + b は a + b の演算結果を c に代入する
+=加算代入演算子c += a は c = c + a と同等
-=減算代入演算子c -= a は c = c - a と同等
*=乗算代入演算子c *= a は c = c * a と同等
/=除算代入演算子c /= a は c = c / a と同等
%=剰余代入演算子c %= a は c = c % a と同等
**=べき乗代入演算子c **= a は c = c ** a と同等
//=切り捨て除算代入演算子c //= a は c = c // a と同等
:=セイウチ演算子。この演算子の主な目的は、式の中で代入とその代入値を返すことを同時に行うことです。Python3.8 バージョンで追加された演算子。

この例では、代入式を使うことで len() を2回呼び出すのを避けられます:

if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

以下の例は、Pythonのすべての代入演算子の操作を示しています:

例(Python 3.0+)

#!/usr/bin/python3 a = 21 b = 10 c = 0 c = a + b print ("1 - c の値は:", c) c += a print ("2 - c の値は:", c) c *= a print ("3 - c の値は:", c) c /= a print ("4 - c の値は:", c) c = 2 c %= a print ("5 - c の値は:", c) c **= a print ("6 - c の値は:", c) c //= a print ("7 - c の値は:", c)

上記の例の出力結果:

1 - c 的值为: 31
2 - c 的值为: 52
3 - c 的值为: 1092
4 - c 的值为: 52.0
5 - c 的值为: 2
6 - c 的值为: 2097152
7 - c 的值为: 99864

Python 3.8 以降では、セイウチ演算子(Walrus Operator)と呼ばれる新しい構文機能が導入され、それには:=記号を使います。この演算子の主な目的は、式の中で代入とその代入値を返すことを同時に行うことです。

セイウチ演算子を使うと、場合によってはコードを簡素化できます。特に、式の中で代入結果を使用する必要がある場合に有効です。これはループ条件や式内の重複した計算を簡素化するのに役立ちます。

以下はセイウチ演算子の使用を示す簡単な例です:

例

# 従来の書き方
n = 10
if n > 5:
    print(n)

# セイウチ演算子を使用
if (n := 10) > 5:
    print(n)
  • if (n := 10) > 5::これはセイウチ演算子(:=)を使用した書き方です。セイウチ演算子は式の中で代入操作を行います。
    • (n := 10):変数nを 10 に代入し、同時にこの代入結果を返します。
    • > 5:代入後のnが 5 より大きいかどうかを確認します。条件が真の場合、次のコードブロックが実行されます。
  • print(n):条件が真の場合、変数nの値(すなわち 10)を出力します。

セイウチ演算子の利点:

  • セイウチ演算子(:=)は式の内部で代入を許可するため、コードの重複を減らし、可読性と簡潔さを向上させることができます。
  • 上記の例では、従来の書き方では代入のために別の行が必要ですn、その後if文で条件チェックを行います。一方、セイウチ演算子を使用した書き方では、if文内で直接代入と条件チェックを行うことができます。

Pythonビット演算子

ビット演算子は数値を2進数とみなして計算します。Pythonのビット演算の規則は以下のとおりです:

下の表では、変数 a は 60、b は 13 で、2進数形式は次のとおりです。

a = 0011 1100

b = 0000 1101

-----------------

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a  = 1100 0011
演算子説明例
&ビット単位の論理積(AND)演算子:演算に関与する2つの値について、対応する2つのビットが両方とも1の場合のみ、そのビットの結果は1になり、それ以外は0になります。(a & b) の出力結果は 12、2進数での説明:0000 1100
|ビット単位の論理和(OR)演算子:対応する2つの2進ビットのいずれかが1であれば、結果ビットは1になります。(a | b) の出力結果は 61、2進数での説明:0011 1101
^ビット単位の排他的論理和(XOR)演算子:対応する2つの2進ビットが異なるとき、結果は1になります。(a ^ b) の出力結果は 49、2進数での説明:0011 0001
~ビット反転演算子:データの各2進ビットを反転します。つまり、1を0に、0を1にします。~x例えば-x-1 (~a ) の出力結果は -61、2進数での説明:1100 0011、符号付き2進数の2の補数形式です。
<<左シフト演算子:オペランドの各2進ビットをすべて左に指定した桁数だけシフトします。シフトする桁数は "<<" の右側の数値で指定し、上位ビットは破棄され、下位ビットには0が補充されます。a << 2 の出力結果は 240、2進数での説明:1111 0000
>>右シフト演算子:">>" の左側のオペランドの各2進ビットをすべて右に指定した桁数だけシフトします。">>" の右側の数値がシフトする桁数を指定します。a >> 2 の出力結果は 15、2進数での説明:0000 1111

以下の例は、Pythonのすべてのビット演算子の操作を示しています。

例(Python 3.0+)

#!/usr/bin/python3 a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = a & b # 12 = 0000 1100 print ("1 - c の値は:", c) c = a | b # 61 = 0011 1101 print ("2 - c の値は:", c) c = a ^ b # 49 = 0011 0001 print ("3 - c の値は:", c) c = ~a # -61 = 1100 0011 print ("4 - c の値は:", c) c = a << 2 # 240 = 1111 0000 print ("5 - c の値は:", c) c = a >> 2 # 15 = 0000 1111 print ("6 - c の値は:", c)

上記の例の出力結果:

1 - c 的值为: 12
2 - c 的值为: 61
3 - c 的值为: 49
4 - c 的值为: -61
5 - c 的值为: 240
6 - c 的值为: 15

Python論理演算子

Python言語は論理演算子をサポートしています。以下では、変数 a は 10、b は 20 と仮定します:

演算子論理式説明例
andx and yブール「論理積(AND)」 - x が False の場合、x and y は x の値を返し、それ以外の場合は y の計算値を返します。(a and b) は 20 を返します。
orx or yブール「論理和(OR)」 - x が True の場合、x の値を返し、それ以外の場合は y の計算値を返します。(a or b) は 10 を返します。
notnot xブール「論理否定(NOT)」 - x が True の場合は False を返します。x が False の場合は True を返します。not(a and b) は False を返します。

上記の例の出力結果:

例(Python 3.0+)

#!/usr/bin/python3 a = 10 b = 20 if ( a and b ): print ("1 - 変数 a と b の両方が true") else: print ("1 - 変数 a と b のいずれかが true ではない") if ( a or b ): print ("2 - 変数 a と b の両方が true、またはいずれか一方の変数が true") else: print ("2 - 変数 a と b の両方とも true ではない") # 変数 a の値を変更 a = 0 if ( a and b ): print ("3 - 変数 a と b の両方が true") else: print ("3 - 変数 a と b のいずれかが true ではない") if ( a or b ): print ("4 - 変数 a と b の両方が true、またはいずれか一方の変数が true") else: print ("4 - 変数 a と b の両方とも true ではない") if not( a and b ): print ("5 - 変数 a と b の両方が false、またはいずれか一方の変数が false") else: print ("5 - 変数 a と b の両方が true")

上記の例の出力結果:

1 - 变量 a 和 b 都为 true
2 - 变量 a 和 b 都为 true,或其中一个变量为 true
3 - 变量 a 和 b 有一个不为 true
4 - 变量 a 和 b 都为 true,或其中一个变量为 true
5 - 变量 a 和 b 都为 false,或其中一个变量为 false

Pythonメンバー演算子

上記の演算子に加えて、Pythonはメンバー演算子もサポートしています。テスト例には、文字列、リスト、タプルなどを含む一連のメンバーが含まれています。

演算子説明例
in指定されたシーケンス内で値が見つかった場合は True を返し、それ以外の場合は False を返します。 x は y シーケンス内にある、x が y シーケンス内にある場合は True を返します。
not in指定されたシーケンス内で値が見つからない場合は True を返し、それ以外の場合は False を返します。 x は y シーケンス内にない、x が y シーケンス内にない場合は True を返します。

以下の例は、Pythonのすべてのメンバー演算子の操作を示しています。

例(Python 3.0+)

#!/usr/bin/python3 a = 10 b = 20 list = [1, 2, 3, 4, 5 ] if ( a in list ): print ("1 - 変数 a は指定されたリスト list 内にあります") else: print ("1 - 変数 a は指定されたリスト list 内にありません") if ( b not in list ): print ("2 - 変数 b は指定されたリスト list 内にありません") else: print ("2 - 変数 b は指定されたリスト list 内にあります") # 変数 a の値を変更 a = 2 if ( a in list ): print ("3 - 変数 a は指定されたリスト list 内にあります") else: print ("3 - 変数 a は指定されたリスト list 内にありません")

上記の例の出力結果:

1 - 变量 a 不在给定的列表中 list 中
2 - 变量 b 不在给定的列表中 list 中
3 - 变量 a 在给定的列表中 list 中

Python同一性演算子

同一性演算子は、2つのオブジェクトのメモリ位置を比較するために使用されます。

演算子説明例
isis は、2つの識別子が同じオブジェクトを参照しているかどうかを判断します。 x is y、同様にid(x) == id(y)、参照しているオブジェクトが同じであれば True を返し、それ以外の場合は False を返します。
is notis not は、2つの識別子が異なるオブジェクトを参照しているかどうかを判断します。 x is not y、同様にid(x) != id(y)。参照しているオブジェクトが同じでない場合は結果として True を返し、それ以外の場合は False を返します。

注: id()関数はオブジェクトのメモリアドレスを取得するために使用されます。

以下の例は、Pythonのすべての同一性演算子の操作を示しています。

例(Python 3.0+)

#!/usr/bin/python3 a = 20 b = 20 if ( a is b ): print ("1 - a と b は同じ識別情報(ID)を持っています") else: print ("1 - a と b は同じ識別情報(ID)を持っていません") if ( id(a) == id(b) ): print ("2 - a と b は同じ識別情報(ID)を持っています") else: print ("2 - a と b は同じ識別情報(ID)を持っていません") # 変数 b の値を変更 b = 30 if ( a is b ): print ("3 - a と b は同じ識別情報(ID)を持っています") else: print ("3 - a と b は同じ識別情報(ID)を持っていません") if ( a is not b ): print ("4 - a と b は同じ識別情報(ID)を持っていません") else: print ("4 - a と b は同じ識別情報(ID)を持っています")

上記の例の出力結果:

1 - a 和 b 有相同的标识
2 - a 和 b 有相同的标识
3 - a 和 b 没有相同的标识
4 - a 和 b 没有相同的标识

is と == の違い:

is は2つの変数が参照するオブジェクトが同じかどうかを判断するために使用され、== は参照している変数の値が等しいかどうかを判断するために使用されます。

>>>a = [1, 2, 3] >>> b = a >>> b is a True >>> b == a True >>> b = a[:] >>> b is a False >>> b == a True

Python演算子の優先順位

以下の表は、優先順位が最高から最低までのすべての演算子を示しています。同じセル内の演算子は同じ優先順位を持ちます。演算子は特に指定がない限り、すべて二項演算を指します。同じセル内の演算子は左から右へグループ化されます(ただし、べき乗演算は右から左へグループ化されます)。

演算子

説明

(expressions...),

[expressions...], {key: value...}, {expressions...}

括弧で囲まれた式

x[index], x[index:index], x(arguments...), x.attribute

読み取り、スライス、呼び出し、属性参照

await x

await 式

**

べき乗(指数)

+x, -x, ~x

正、負、ビット単位の否定(NOT)

*, @, /, //, %

乗算、行列乗算、除算、整数除算、剰余

+, -

加算と減算

<<, >>

シフト

&

ビット単位の論理積(AND)

^

ビット単位の排他的論理和(XOR)

|

ビット単位の論理和(OR)

in,not in, is,is not, <, <=, >, >=, !=, ==

比較演算、メンバー検出と同一性検出を含む

not x

論理否定(NOT)

and

論理積(AND)

or

論理和(OR)

if -- else

条件式

lambda

lambda 式

:=

代入式

以下の例は、Pythonのすべての演算子の優先順位の操作を示しています。

例(Python 3.0+)

#!/usr/bin/python3 a = 20 b = 10 c = 15 d = 5 e = 0 e = (a + b) * c / d #( 30 * 15 ) / 5 print ("(a + b) * c / d の演算結果は:", e) e = ((a + b) * c) / d # (30 * 15 ) / 5 print ("((a + b) * c) / d の演算結果は:", e) e = (a + b) * (c / d) # (30) * (15/5) print ("(a + b) * (c / d) の演算結果は:", e) e = a + (b * c) / d # 20 + (150/5) print ("a + (b * c) / d の演算結果は:", e)

上記の例の出力結果:

(a + b) * c / d 运算结果为: 90.0
((a + b) * c) / d 运算结果为: 90.0
(a + b) * (c / d) 运算结果为: 90.0
a + (b * c) / d 运算结果为: 50.0

and はより高い優先順位を持っています:

例

x = True y = False z = False print("ケース1:デフォルトの優先順位(最初に and を計算)") if x or y and z: # x or (y and z) と同等 print("yes") # 出力されます else: print("no") print("\nケース2:優先順位を強制的に変更(最初に or を計算)") if (x or y) and z: # 人為的に括弧を追加して順序を変更 print("yes") # 出力されません else: print("no") # 出力されます

上記の例では、最初に計算し、y and zFalse を返し、次にx or FalseTrue を返します。出力結果は次のとおりです:

情况1:默认优先级(先算and)
yes

情况2:强制改变优先级(先算or)
no

注意:Python3 ではサポートされなくなりました<>演算子は、使用できます!=代わりに、どうしてもこの比較演算子を使用したい場合は、以下の方法を使用できます:

>>> from __future__ import barry_as_FLUFL
>>> 1 <> 2
True
その他の拡張