在 Python 中,符号 @
主要有两个用法:一是作为装饰器(decorators)的标识符,二是用来执行矩阵乘法。本文将从基础到进阶逐一讲解这两个用法,并给出相应的代码示例。
1. 装饰器(Decorator)
在 Python 中,装饰器是一种用于在函数运行前或运行后添加功能的方案。通过使用 @
符号,可以方便地将装饰器应用到函数或方法上。装饰器本质上是一个接受函数作为参数,并返回一个新函数的高阶函数。
基础示例
以下是一个简单的装饰器示例,它在函数执行前后输出一些信息:
def my_decorator(func):
def wrapper():
print("函数执行前")
func()
print("函数执行后")
return wrapper
@my_decorator
def say_hello():
print("你好,世界!")
say_hello()
在这个示例中,装饰器 my_decorator
包裹了 say_hello
函数,当我们调用 say_hello()
时,实际执行的是 wrapper
函数,这样就添加了额外的功能。
进阶示例
装饰器也可以传递参数。例如,如果你想创建一个装饰器,它接受一个参数来控制输出的内容,可以这样做:
def repeat(num_times):
def decorator_repeat(func):
def wrapper(*args, **kwargs):
for _ in range(num_times):
func(*args, **kwargs)
return wrapper
return decorator_repeat
@repeat(3)
def greet(name):
print(f"你好,{name}!")
greet("Alice")
在这个示例中,装饰器 repeat
接受一个 num_times
参数,然后返回一个新的装饰器 decorator_repeat
。当 greet
被调用时,它会打印三次打招呼的消息。
2. 矩阵乘法
从 Python 3.5 开始,@
符号也被引入用于矩阵乘法。这一特性极大地方便了对数组和矩阵数据的操作,尤其是在使用 NumPy 库时。
基础示例
首先,我们需要安装并导入 NumPy 库,可以使用以下命令安装:
pip install numpy
然后使用 @
进行矩阵乘法:
import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
C = A @ B
print(C)
在此示例中,矩阵 A
和 B
通过 @
运算符进行乘法运算,结果矩阵 C
将输出:
[[19 22]
[43 50]]
进阶示例
可以结合使用 @
符号和其他功能强大的 NumPy 操作,例如进行多维数组的乘法:
import numpy as np
A = np.random.rand(3, 2) # 3x2 矩阵
B = np.random.rand(2, 3) # 2x3 矩阵
C = A @ B # 结果为 3x3 矩阵
print("矩阵 A:\n", A)
print("矩阵 B:\n", B)
print("矩阵 C:\n", C)
在此示例中,我们使用随机数生成的矩阵进行乘法运算,最终得到一个新的矩阵 C
。
总结
通过以上的讲解,我们可以看到 @
符号在 Python 中具有丰富的用法。无论是用于装饰器来增强函数,还是用于执行矩阵乘法,它都展示了 Python 简洁而强大的特性。理解和掌握这些用法,将有助于我们更高效地编写 Python 代码。