この記事では、Pythonにおける演算子の使い方について解説していきます。
具体的には、文字列での演算、否定やオーバーロード、in,is演算等についても詳しく解説していきます。
演算子は、変数や値に対して特定の操作を行うために使用されます。
Pythonには、キーワードまたは特殊文字である演算子がたくさんあります。
これらの演算子が作用する値や変数は オペランド と呼ばれます。
この記事もチェック:Pythonでコロン(:)の意味とは?変数や文字列、配列での使い方を解説する
Pythonの演算子の種類
Pythonの演算子は、以下のように分類されます。
- 算術演算子
- 論理演算子
- 比較演算子
- ビット演算子
- 代入演算子
- in演算子
- is演算子
1. 算術演算子
算術演算子は通常、数字に対して使うものです。
加算、減算、乗算、除算、剰余、指数演算の演算子があります。
これらの演算子の中には、文字列に対して演算できるものもあります。
-
- : 足し算
- – : 引き算
- * : 掛け算
- / : 割り算
- ** : 指数
- // : 割り算の余り
以下は、簡単な例を見ていきます。
x = 15
y = 7
sum = x + y
print("addition =", sum)
subtraction = x - y
print("subtraction =", subtraction)
multiplication = x * y
print("multiplication =", multiplication)
division = x / y
print("division =", division)
modulus = x % y
print("modulus =", modulus)
exponent = x ** 2
print("exponent =", exponent)
floor_division = x // y
print("division =", floor_division)# 2
また、文字列に対して加算(足し算)を行うこともできます。
print("addition of strings =", ("Python" + " " + "Operators"))
print("multiplication of strings =", ("Python" * 2))
結果は以下の通りになります。
addition of strings = Python Operators
multiplication of strings = PythonPython
2. 比較演算子
比較演算子は、2つの値を比較するために使用されます。
その結果は常にブール値、つまり True
または False
となります。
Pythonの比較演算子の一覧は以下の通りです。
- == : 値が同じ場合True.
- != : 値が異なる場合True.
-
; : 左の値が大きい時にTrue.
-
= : 左の値が大きいか、等しい時にTrue
以下は、簡単な例を見ていきます。
x = 10
y = 20
print(f'equals = {x == y}')
print(f'not equals = {x != y}')
print(f'greater than = {x > y}')
print(f'less than = {x = y}')
print(f'less than or equal to = {x
3. ビット演算子
二項演算子とも呼ばれ、整数に対してのみ使えます。
数字は2進数に変換され、各ビットに対して演算が行われます。
最後に10進数に変換して値を返します。
Pythonには6つのビット演算子があります。
- & : AND 演算子
- | : OR演算子
- ^ :XOR演算子
- 2進数の補数演算子
-
:二元右シフト演算子
x = 10 # 1010
y = 4 # 0100
print(f'Binary AND = {x & y}')
print(f'Binary OR = {x | y}')
print(f'Binary XOR = {x ^ y}')
print(f'Binary Ones Complement = {~x}')
print(f'Binary Left Shift by 2 = {x > 3}')
結果は以下の通りです。
Binary AND = 0
Binary OR = 14
Binary XOR = 14
Binary Ones Complement =- 11
Binary Left Shift by 2 = 40
Binary Right Shift by 3 = 1
4. Python 論理演算子
Pythonには3つの論理演算子があります。
これらはブーリアン演算子(TrueとかFalseとか)で動作し、ブーリアン値を返します。
- and : 両方の演算がTrueの時にTrueを返す
- or : どちらか一方の演算がTrueの場合にTrueを返す
- not : TrueとFalseがひっくり返る
以下の様にコードを書けばOKです。
b1 = True
b2 = False
print(f'{b1} and {b2} = {b1 and b2}')
print(f'{b1} and {b2} = {b1 or b2}')
print(f'not {b1} = {not b1}')
5. 代入演算子
代入演算子(=)は、左オペランドの値を右オペランドに代入するために使用されます。
- = : 単純な代入演算子
- += : 2つのオペランドを加算して、右側のオペランドに値を代入
- = : 左オペランドから右オペランドを減算して、その値を左オペランドに代入します。
- /= : 左オペランドを右オペランドから除算して、その値を左オペランドに代入します。
- 左オペランドと右オペランドのモジュロスを計算し、左オペランドに代入します。
- = : 左オペランドと右オペランドのべき乗を計算し、左オペランドに代入します。
- //= : 左オペランドと右オペランドの床分割を行い、その値を左オペランドに代入します。
a = 10 # simple assignment operator
b = 5
a += b # same as a=a+b
print(a)# 15
a -= b # same as a=a-b
print(a)# 10
a *= b # same as a = a*b
print(a)# 50
a /= b # same as a = a/b
print(a)# 10.0
a %= b # same as a = a%b
print(a)# 0.0
a = 2
b = 4
a = b # same as a = ab
print(a)# 16
a //= b# same as a = a // b (floor division)
print(a)# 4
6. in演算子
in演算子(メンバーシップ演算子)は、配列とかリストの中に値が存在するかのチェックで使用されます。
Pythonには2つのメンバーシップ演算子があります。
- in
- not in
こいつらは、大体if文とセットで使われることが多いです。
x = 3
my_tuple = (1 , 2 , 3 , 4)
my_list = [ 1 , 2 , 3 , 4 ]
my_str = "Hello"
print(f'{x} is present in {my_tuple} = {x in my_tuple}')
if x inmy_list:
print(f'{x} is present in {my_list}')
if 'a' not inmy_str:
print(f'a is not present in {my_str}')
7. is演算子
Pythonのis演算子は、2つの変数が同じメモリ位置を指しているかどうかをチェックするために使用されます。
- is : 両方の変数が同じメモリ位置を指している場合、真を返します。
- is not : 両方の変数が異なるメモリ位置を指している場合、真を返します。
s1 = [ 1 , 2 ]
s2 = [ 1 , 2 ]
s3 = s1
print(s1 is s2) # False
print(s1 is s3) # True
print(s1 is not s2) # True
print(s1 is not s3) # False
Pythonの演算子のオーバーロードについて
Pythonは演算子のオーバーロードをサポートしています。
オーバーロードとは、プラスとかマイナスとかの演算子の挙動を変えることを言います。
例えば、通常は以下の様に、オブジェクトに対して足し算を行うとエラーが発生します。
class Data:
id = 0
def __init__(self, i):
self.id = i
d1 = Data(10)
d2 = Data(20)
d3 = d1 + d2
print(d3.id)
結果は以下の様になります。
Traceback (most recent call last):
File"/Users/pankaj/Documents/PycharmProjects/PythonTutorialPro/hello-world/operators_examples.py" , line 9 , in
d3 = d1 + d2
TypeError: unsupported operandtype(s)for +:'Data'and'Data'
Dataクラスでプラス演算子を使いたい場合は、Dataクラスに対して __add__() メソッドを定義する必要があります。
更新後のコードと出力結果を見てみましょう。
class Data:
id = 0
def __init__(self, i):
self.id = i
def __add__(self, other):
return Data(self.id + other.id)
d1 = Data(10)
d2 = Data(20)
d3 = d1 + d2
print(d3.id)