Pythonの「@」とは?デコレータ・行列演算・pandasの使い方を徹底解説

はじめに

Pythonを学んでいると、コード内で 「@」(アットマーク) を見かけることがあるでしょう。特にデコレータ(@staticmethod など)や、行列演算で使用される @ 演算子などが代表的な例です。しかし、初めて見る人にとっては「この記号は何を意味するのか?」と疑問に思うこともあるでしょう。

この記事では、Pythonにおける「@」の役割と使い方について詳しく解説します。具体的には、デコレータ、行列演算、pandasのquery()メソッド などでの利用方法を紹介し、初心者にも分かりやすく説明していきます。

Pythonにおける「@」とは?

Pythonにおいて「@」は、主に 「デコレータ」 として利用されます。デコレータとは、関数やメソッドの動作を変更するための仕組みです。また、Python 3.5 以降では 「@」演算子 が導入され、行列の積を簡潔に表現できるようになりました。さらに、pandasのquery()メソッド において、変数を参照するための「@」の使い方もあります。

「@」の使用例を以下の3つの観点から解説します。

  1. デコレータ(Decorator):関数やクラスに特定の機能を付加する。
  2. 行列演算(@ 演算子):NumPy などで行列の積を計算する。
  3. pandasの query() メソッド:データフレームのクエリ内で変数を参照する。
年収訴求

デコレータ(Decorator)とは?

デコレータの基本

デコレータは、関数やメソッドの前に「@」を付けることで、その関数の動作を変更する仕組み です。主に以下のような用途で使われます。

  • ログの記録
  • 実行時間の計測
  • 関数の動作の制限(例えば認証機能)

デコレータの構文

Pythonでデコレータを使う際の基本的な構文は以下のようになります。

def my_decorator(func):
    def wrapper():
        print("処理を実行する前")
        func()
        print("処理を実行した後")
    return wrapper

@my_decorator
def my_function():
    print("メインの関数が実行されました")

my_function()

デコレータの実行結果

処理を実行する前
メインの関数が実行されました
処理を実行した後

デコレータの実践的な使用例

デコレータは、標準ライブラリにも多く含まれています。例えば、クラスメソッドやスタティックメソッドを定義する際に「@」が使用されます。

@classmethod

クラスメソッドを定義する際には @classmethod を使います。

class MyClass:
    class_variable = "クラス変数"

    @classmethod
    def class_method(cls):
        return f"クラスメソッドが呼ばれました: {cls.class_variable}"

print(MyClass.class_method())

@staticmethod

スタティックメソッドは @staticmethod を使います。

class MyClass:
    @staticmethod
    def static_method():
        return "スタティックメソッドが呼ばれました"

print(MyClass.static_method())
侍エンジニア塾

行列演算における「@」演算子

Python 3.5 以降では、@ 演算子が導入されました。これは、行列の積 を簡潔に表現するための演算子です。

NumPyを使った行列の積

import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

C = A @ B
print(C)

 

pandasのquery()メソッドでの「@」の使用

pandasの query() メソッドでは、@ を使って変数を参照することができます。

変数を使ったフィルタリング

import pandas as pd

df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]})
threshold = 30

# thresholdの値を参照する
filtered_df = df.query('age > @threshold')
print(filtered_df)

まとめ

  • デコレータ は関数やクラスの動作を変更するために使われる。
  • 行列演算の「@」演算子 は、NumPyなどで行列積の計算を簡潔にする。
  • pandasの query() メソッド では変数参照に「@」を使用できる。

「@」の用途を理解し、適切に活用することで、より効率的なPythonプログラミングが可能になります。

年収訴求