Python

Python初級

二項算術演算 (binary arithmetic operation)

二項算術演算 (binary arithmetic operation)

加算演算子 (+)

基本的な使い方

加算演算子は、二つの数値を加算します。例えば、

a = 10
b = 5
c = a + b
print(c)  # 出力: 15

上記の例では、変数aとbの値を加算し、結果をcに代入しています。

文字列の連結

加算演算子は、文字列同士を連結するためにも使用できます。

str1 = "こんにちは、"
str2 = "世界!"
str3 = str1 + str2
print(str3)  # 出力: こんにちは、世界!

この例では、str1とstr2を連結して新しい文字列str3を作成しています。

リストの結合

加算演算子は、リストを結合する際にも利用できます。

list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = list1 + list2
print(combined_list)  # 出力: [1, 2, 3, 4, 5, 6]

ここでは、list1とlist2を結合してcombined_listを作成しています。

その他のデータ型への適用

加算演算子は、数値、文字列、リスト以外にもタプルや辞書など他のデータ型に対しても使用できます。ただし、データ型によって結果が異なるため注意が必要です。

tuple1 = (1, 2)
tuple2 = (3, 4)
combined_tuple = tuple1 + tuple2
print(combined_tuple)  # 出力: (1, 2, 3, 4)

この例では、タプルを加算して新しいタプルを作成しています。

加算演算子 (+)まとめ

加算演算子 (+)は、数値の加算だけでなく、文字列やリスト、タプルなど様々なデータ型の結合にも使用できる柔軟な演算子です。適切に活用することで、コードの可読性と効率を向上させることができます。

減算演算子 (-)

減算演算子の基本

減算演算子は、二つの数値の差を計算するために使用されます。基本的な使い方は以下の通りです。

a = 10
b = 3
result = a - b
print(result)  # 出力: 7

変数を用いた減算

変数の値から他の値を引く際にも、減算演算子を使用できます。

total = 20
total -= 5  # totalは15になります
print(total)  # 出力: 15

複数の減算

複数の減算を一度に行うことも可能です。

a = 50
b = 20
c = 10
result = a - b - c
print(result)  # 出力: 20

減算演算子の注意点

負の数の扱いなど、減算演算子を使用する際には注意が必要です。特に、変数が負の値を取る場合や、大きな数値同士の減算では結果が予期せぬものになることがあります。

減算演算子 (-)まとめ

減算演算子 (-)は、Pythonにおいて数値の差を計算する基本的な演算子です。簡単に使用できるため、様々な場面で活用することができます。正確な計算結果を得るために、変数の値やデータ型に注意しながら使用しましょう。

乗算演算子 (*)

基本的な使用方法

Pythonにおける乗算演算子 *は、主に数値同士の掛け算を行うために使用されます。例えば:

a = 5
b = 3
result = a * b
print(result)  # 出力: 15

リストや文字列との組み合わせ

*演算子は、数値以外にもリストや文字列を繰り返す際に用いることができます。

# リストの繰り返し
my_list = [1, 2, 3]
repeated_list = my_list * 2
print(repeated_list)  # 出力: [1, 2, 3, 1, 2, 3]

# 文字列の繰り返し
my_string = "Hello"
repeated_string = my_string * 3
print(repeated_string)  # 出力: HelloHelloHello

関数の引数展開

*演算子は、関数の引数を展開する際にも使用されます。これにより、タプルやリストを個別の引数として渡すことが可能です。

def multiply(a, b):
    return a * b

args = (4, 5)
print(multiply(*args))  # 出力: 20

その他の応用例

*演算子を用いることで、複数の要素を簡潔に扱うことができます。例えば、変数の多重代入やアンパックにも活用されます。

# 変数の多重代入
x, y, *rest = [1, 2, 3, 4, 5]
print(x, y, rest)  # 出力: 1 2 [3, 4, 5]

乗算演算子 (*)まとめ

Pythonの*乗算演算子は、数値の掛け算だけでなく、リストや文字列の繰り返し、関数の引数展開など多岐にわたる用途があります。非常に柔軟で強力な演算子です。

行列乗算演算子 (@)

概要

Pythonにおける行列乗算演算子 (@)は、主にNumPyライブラリで使用され、二つの行列の積を計算するために導入されました。Python 3.5以降で利用可能であり、従来のnumpy.dot関数に代わる直感的な方法を提供します。

使用方法

以下に、@演算子を使用した行列乗算の例を示します。

import numpy as np

# 行列Aの定義
A = np.array([[1, 2],
              [3, 4]])

# 行列Bの定義
B = np.array([[5, 6],
              [7, 8]])

# 行列Aと行列Bの乗算
C = A @ B

print("行列A:")
print(A)
print("行列B:")
print(B)
print("行列A @ 行列B:")
print(C)

実行結果

行列A:
[[1 2]
 [3 4]]

行列B:
[[5 6]
 [7 8]]

行列A @ 行列B:
[[19 22]
 [43 50]]

注意点

  • 両方の行列の内側の次元が一致している必要があります。つまり、最初の行列の列数が、二番目の行列の行数と同じでなければなりません。
  • スカラー値との乗算や他のデータ型との組み合わせでは期待通りに動作しない場合があります。

行列乗算演算子 (@)まとめ

行列乗算演算子 (@)は、Pythonにおける行列計算をより直感的に行うための強力なツールです。特にNumPyと組み合わせることで、高速かつ効率的な数値計算が可能となり、科学技術計算やデータ分析、機械学習など多岐にわたる分野で活用されています。

除算演算子 (/)

基本的な使用法

Pythonにおける除算演算子 (/)は、二つの数値を割り算し、結果を浮動小数点数で返します。

a = 10
b = 3
result = a / b
print(result)  # 出力: 3.3333333333333335

整数同士の除算

整数同士の除算でも、結果は常に浮動小数点数となります。

x = 8
y = 2
print(x / y)  # 出力: 4.0

ゼロによる除算

ゼロで割ろうとすると、Pythonではエラーが発生します。

numerator = 5
denominator = 0
result = numerator / denominator  # ZeroDivisionErrorが発生します

複素数の除算

複素数同士の除算もサポートされています。

c1 = 4 + 2j
c2 = 1 - 1j
result = c1 / c2
print(result)  # 出力: (1.0+3.0j)

除算演算子 (/) まとめ

除算演算子 (/)は、Pythonで割り算を行う際に使用され、常に浮動小数点数を返します。整数同士の割り算や複素数の割り算にも対応しており、ゼロ除算には注意が必要です。適切に使用することで、さまざまな数値計算に柔軟に対応できます。

切り捨て除算演算子 (//)

概要

切り捨て除算演算子(//)は、Pythonにおいて除算の結果を整数部分に切り捨てる演算子です。この演算子を使用すると、結果が常に小さい方の整数に切り捨てられます。

使用方法

a // b の形式で使用します。ここで、abは数値です。演算子はabで除算し、結果を切り捨てて返します。

# 正の数の切り捨て除算
result = 7 // 3
print(result)  # 出力: 2

# 負の数の切り捨て除算
result = -7 // 3
print(result)  # 出力: -3

切り捨て除算演算子 (//)まとめ

切り捨て除算演算子は、整数除算やループ処理で効果的に使用できます。特に、商の整数部分が必要な場面で便利です。

剰余演算子 (%)

概要

剰余演算子 (%)は、二つの数値を割ったときの余りを求めるために使用されます。主に整数同士の計算で利用されますが、浮動小数点数にも適用可能です。

基本的な使い方

a = 10
b = 3
result = a % b
print(result)  # 出力: 1

この例では、10を3で割った余りである1がresultに格納され、出力されます。

応用例

偶数・奇数の判定

number = 4
if number % 2 == 0:
    print("偶数です。")
else:
    print("奇数です。")
# 出力: 偶数です。

数値が2で割り切れるかどうかを確認することで、その数が偶数か奇数かを判定できます。

ループ処理での使用

for i in range(1, 11):
    if i % 3 == 0:
        print(f"{i} は3の倍数です。")

このループは1から10までの数の中で、3の倍数を検出し表示します。

3 は3の倍数です。
6 は3の倍数です。
9 は3の倍数です。

浮動小数点数との組み合わせ

a = 10.5
b = 3.2
result = a % b
print(result)  # 出力: 0.8999999999999995

浮動小数点数同士でも剰余演算子を使用できますが、計算結果に誤差が生じる場合があります。

剰余演算子 (%)まとめ

剰余演算子 (%)は、割り算の余りを簡単に取得できる便利な演算子です。整数や浮動小数点数との組み合わせで、様々なプログラミングの場面で有効に活用できます。条件分岐やループ処理など、多岐にわたる用途で役立つため、Pythonプログラミングにおいて欠かせない機能の一つです。

特殊メソッド (add(), sub(), mul(), matmul(), truediv(), floordiv(), mod())

add()

__add__() はオブジェクト同士の加算を定義する特殊メソッドです。例えば、カスタムクラスで加算演算子 + を使用可能にします。

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

v1 = Vector(2, 3)
v2 = Vector(5, 7)
print(v1 + v2)  # 出力: Vector(7, 10)

sub()

__sub__() はオブジェクト同士の減算を定義する特殊メソッドです。これにより - 演算子をカスタムクラスで使用できます。

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __sub__(self, other):
        return Vector(self.x - other.x, self.y - other.y)

    def __repr__(self):
        return f"Vector({self.x}, {self.y})"

v1 = Vector(10, 15)
v2 = Vector(4, 5)
print(v1 - v2)  # 出力: Vector(6, 10)

mul()

__mul__() はオブジェクト同士の乗算を定義する特殊メソッドです。* 演算子をカスタムクラスで利用可能にします。

class Scalar:
    def __init__(self, value):
        self.value = value

    def __mul__(self, other):
        if isinstance(other, Scalar):
            return Scalar(self.value * other.value)
        return Scalar(self.value * other)

    def __repr__(self):
        return f"Scalar({self.value})"

s1 = Scalar(3)
s2 = Scalar(4)
print(s1 * s2)       # 出力: Scalar(12)
print(s1 * 5)        # 出力: Scalar(15)

matmul()

__matmul__() は行列乗算を定義する特殊メソッドで、@ 演算子に対応しています。

class Matrix:
    def __init__(self, data):
        self.data = data  # data is a list of lists

    def __matmul__(self, other):
        result = []
        for row in self.data:
            new_row = []
            for col in zip(*other.data):
                new_row.append(sum(a * b for a, b in zip(row, col)))
            result.append(new_row)
        return Matrix(result)

    def __repr__(self):
        return f"Matrix({self.data})"

m1 = Matrix([[1, 2], [3, 4]])
m2 = Matrix([[5, 6], [7, 8]])
print(m1 @ m2)  # 出力: Matrix([[19, 22], [43, 50]])

truediv()

__truediv__() は真の除算を定義する特殊メソッドで、/ 演算子をカスタムクラスで使用できます。

class Number:
    def __init__(self, value):
        self.value = value

    def __truediv__(self, other):
        return Number(self.value / other.value)

    def __repr__(self):
        return f"Number({self.value})"

n1 = Number(10)
n2 = Number(2)
print(n1 / n2)  # 出力: Number(5.0)

floordiv()

__floordiv__() は床除算を定義する特殊メソッドで、// 演算子に対応します。

class Number:
    def __init__(self, value):
        self.value = value

    def __floordiv__(self, other):
        return Number(self.value // other.value)

    def __repr__(self):
        return f"Number({self.value})"

n1 = Number(10)
n2 = Number(3)
print(n1 // n2)  # 出力: Number(3)

mod()

__mod__() は剰余演算を定義する特殊メソッドで、% 演算子をカスタムクラスで使用できます。

class Number:
    def __init__(self, value):
        self.value = value

    def __mod__(self, other):
        return Number(self.value % other.value)

    def __repr__(self):
        return f"Number({self.value})"

n1 = Number(10)
n2 = Number(3)
print(n1 % n2)  # 出力: Number(1)

特殊メソッド (add(), sub(), mul(), matmul(), truediv(), floordiv(), mod())まとめ

上記の特殊メソッドを活用することで、カスタムクラスに対して基本的な算術演算子を定義・拡張できます。これにより、オブジェクト指向プログラミングにおいてより直感的かつ柔軟な操作が可能になります。特に、演算子オーバーロードを適切に行うことで、コードの可読性と再利用性が向上します。 Pythonのこれらの特殊メソッドを理解し活用することは、効率的なプログラム設計において非常に重要です。

-Python初級
-, , ,