Python 的「@」是什麼?完整解析裝飾器、矩陣運算與 pandas 的用法

前言

在學習 Python 的過程中,您可能會在程式碼中看到 「@」(小老鼠符號)。最常見的例子包括裝飾器(如 @staticmethod)或是用於矩陣運算的 @ 運算子。然而,對於初學者來說,第一次看到這個符號時,可能會產生「這是什麼意思?」的疑問。

本文將詳細說明 Python 中「@」的用途與功能。我們將針對 裝飾器、矩陣運算,以及 pandas 的 query() 方法 這三種常見使用情境,提供簡單易懂的說明與實用的程式碼範例,幫助初學者快速理解與上手。

Python 中的「@」是什麼?

在 Python 中,「@」主要是用於 「裝飾器」。裝飾器是一種可以改變函式或方法行為的機制。此外,從 Python 3.5 開始,「@」運算子 被引入,讓我們可以更簡潔地進行矩陣相乘的操作。除此之外,在 pandas 的 query() 方法 中,也可以使用「@」來引用變數。

我們將從以下三個角度,說明「@」的使用範例:

  1. 裝飾器(Decorator):為函式或類別附加特定功能。
  2. 矩陣運算(@ 運算子):使用 NumPy 等工具進行矩陣相乘。
  3. pandas 的 query() 方法:在查詢語句中引用外部變數。
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

什麼是裝飾器(Decorator)?

裝飾器的基本概念

裝飾器是一種在函式或方法前加上「@」來改變該函式行為的機制。主要用於以下幾種用途:

  • 記錄日誌(Logging)
  • 計算執行時間
  • 限制函式的行為(例如加入認證功能)

裝飾器的語法

在 Python 中使用裝飾器時,其基本語法如下所示:

def my_decorator(func):
    def wrapper():
        print("執行前的處理")
        func()
        print("執行後的處理")
    return wrapper

@my_decorator
def my_function():
    print("主要的函式被執行了")

my_function()

裝飾器的執行結果

執行前的處理
主要的函式被執行了
執行後的處理

裝飾器的實際應用範例

裝飾器在 Python 標準函式庫中也被廣泛使用。例如,定義類別方法(class method)或靜態方法(static method)時就會使用「@」。

@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 來引用變數 threshold 的值
filtered_df = df.query('age > @threshold')
print(filtered_df)
侍エンジニア塾

總結

  • 裝飾器 用於改變函式或類別的行為。
  • 矩陣運算中的「@」運算子 可以簡潔地計算 NumPy 等矩陣的乘積。
  • pandas 的 query() 方法 允許在查詢中使用「@」來引用變數。

了解「@」的不同用途並善加運用,將有助於提高 Python 程式的效率與可讀性。