Python教程:@符号的用法

打印 上一主题 下一主题

主题 876|帖子 876|积分 2628

@ 符号在 Python 中最常见的使用情况是在装饰器中。一个装饰器可以让你改变一个函数或类的行为。
@ 符号也可以作为一个数学运算符使用,因为它可以在Python中乘以矩阵。本教程将教你如何使用 Python 的@ 符号。
装饰器中使用@ 符号

装饰器是一个接受一个函数作为参数的函数,向其添加一些功能,并返回修改后的函数。
例如,请看下面的代码。
  1. def decorator(func):
  2.     return func
  3. @decorator
  4. def some_func():
  5.     pass
复制代码
这等同于下面的代码。
  1. def decorator(func):
  2.     return func
  3. def some_func():
  4.     pass
  5. some_func = decorator(some_func)
复制代码
装饰器修改了原始函数,而没有改变原始函数中的任何脚本。
让我们看看上述代码片断的一个实际例子。
  1. def message(func):
  2.     def wrapper():
  3.         print("Hello Decorator")
  4.         func()
  5.     return wrapper
  6. def myfunc():
  7.     print("Hello World")
复制代码
@ 符号与装饰器函数的名称一起使用。它应该写在将被装饰的函数的顶部。
  1. @message
  2. def myfunc():
  3.         print("Hello World")
  4. myfunc()
复制代码
输出:
  1. Hello Decorator
  2. Hello World
复制代码
上面的装饰器例子与这段代码做了同样的工作。
  1. def myfunc():
  2.     print("Hello World")
  3. myfunc = message(myfunc)
  4. myfunc()
复制代码
输出:
  1. Hello Decorator
  2. Hello World
复制代码
Python中一些常用的装饰器是:@property ,@classmethod ,和@staticmethod 。
使用@ 符号进行矩阵相乘

从Python 3.5开始,@ 符号也可以作为一个操作符在Python中执行矩阵乘法。
下面的例子是一个在Python中进行矩阵相乘的简单实现。
  1. class Mat(list):
  2.     def __matmul__(self, B):
  3.         A = self #Python小白学习交流群:153708845
  4.         return Mat([[sum(A[i][k]*B[k][j] for k in range(len(B)))
  5.                     for j in range(len(B[0])) ] for i in range(len(A))])
  6. A = Mat([[2,5],[6,4]])
  7. B = Mat([[5,2],[3,5]])
  8. print(A @ B)
复制代码
输出:
  1. [[25, 29], [42, 32]]
复制代码
就这样了。Python 中的@ 符号被用于装饰器和矩阵乘法。
现在你应该明白@ 符号在 Python 中的作用。我们希望你觉得这个教程对你有帮助。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

何小豆儿在此

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表