目次
前言
在學習 Python 的過程中,您可能會在程式碼中看到 「@」(小老鼠符號)。最常見的例子包括裝飾器(如 @staticmethod
)或是用於矩陣運算的 @
運算子。然而,對於初學者來說,第一次看到這個符號時,可能會產生「這是什麼意思?」的疑問。
本文將詳細說明 Python 中「@」的用途與功能。我們將針對 裝飾器、矩陣運算,以及 pandas 的 query() 方法 這三種常見使用情境,提供簡單易懂的說明與實用的程式碼範例,幫助初學者快速理解與上手。
Python 中的「@」是什麼?
在 Python 中,「@」主要是用於 「裝飾器」。裝飾器是一種可以改變函式或方法行為的機制。此外,從 Python 3.5 開始,「@」運算子 被引入,讓我們可以更簡潔地進行矩陣相乘的操作。除此之外,在 pandas 的 query() 方法 中,也可以使用「@」來引用變數。
我們將從以下三個角度,說明「@」的使用範例:
- 裝飾器(Decorator):為函式或類別附加特定功能。
- 矩陣運算(@ 運算子):使用 NumPy 等工具進行矩陣相乘。
- pandas 的 query() 方法:在查詢語句中引用外部變數。
什麼是裝飾器(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 程式的效率與可讀性。