Python 中的“at”(@) 符号有什么作用?

Python是一种优秀的解释性编程语言,有自己的语法。指定如何编写和执行编程语言的一组准则称为语法(由计算机的运行时系统和人类开发人员共同执行)。Perl、C 和 Java 在语法上都与 Python 密切相关。不过,这些语言之间存在一些明确的区别。创建 Python 时,高可读性是一个优先考虑的因素。

在本文中,让我们尝试了解 Python 中“@”(at) 符号的多种用法及其实现。

Python语言中“@”符号的两种主要用法如下:

  • 作为装饰者
  • 对于矩阵乘法(作为二元运算符)

在学习“@”作为装饰器的使用之前,我们先来了解一下什么是装饰器,它的用途是什么。

什么是装饰器?

称为装饰器的函数接受另一个函数作为输入,通过添加一些功能来修改它,然后返回更新后的函数。无需更改原始函数的源代码,就可以做到这一点。

人们可以通过装饰来轻松扩展当前函数的功能。通过将该代码包含在包装函数中,我们可以做到这一点。因此,人们可以简单地在包装函数内添加或更改他们想要的任何代码,而无需以任何方式更改原始方法。

要了解有关装饰器的更多信息,请单击此处。

不使用“@”的装饰器示例

#defining function with the wrapper function
def func1(func):
  def wrapper():
    print("Begin")
    func()
    print("End")
 
  return wrapper
 
#defining the function that is passed as parameter
def func2():
  print("AskPython")
 
#calling the function
x = func1(func2)
x()

输出

不使用@符号的装饰器示例

在 Python 中使用“@”进行装饰

现在我们已经了解了装饰器是什么,让我们了解一下“@”符号在装饰中的使用。

看一下上面的例子,我们分配了一个变量x,它等于第一个函数(func1),第二个函数(func2)作为其参数传递。

然后我们调用该变量以所需的方式运行函数。与这种方式不同,最简单的方法是在开始第二个函数之前添加一行带有“@”符号的代码,后跟第一个函数的名称。这与上述函数的工作方式相同。使用“@”符号方法的好处是使代码更具可读性和更容易理解。

下面的例子将给出一个清晰的想法。

#defining function with the wrapper function
def func1(func):
  def wrapper():
    print("Begin")
    func()
    print("End")
 
  return wrapper
 
#defining the function that is passed as parameter
@func1
def func2():
  print("AskPython")
 
#calling the function
func2()

输出

使用 @ 符号的装饰器示例

用户会遇到多种装饰器,但最常见的包括

  • @property:可以通过使用 @property 装饰器标记来访问像常规属性一样的方法。
  • @classmethod:当您需要一个包含类但不是特定于实例的方法时,类方法可能会有所帮助。
  • @staticmethod:静态方法与类相关联,而不是与类实例相关联。主要区别是静态方法不会以任何方式更改类。

使用“@”进行矩阵乘法

在Python 3.5中,@运算符可以被重载。它被称为 __ matmul __ 因为它旨在执行矩阵乘法。要了解更多相关信息,请点击此处。

下面是该方法在Python编程语言中的简单实现。

class example(list):
  def __matmul__(self, y):
    x = self
    return ([[sum(x[i][k] * y[k][j] for k in range(len(y)))
            for j in range(len(y[0])) ] for i in range(len(x))])
 
x = example([[1, 5],[2, 4]])
y = example([[3, 3],[4, 2]])
 
print("OUTPUT: ")
print(x @ y)

输出

使用@符号的矩阵乘法

概括

在本文中,我们尝试理解“@”符号的不同用法。除此之外,我们还了解了装饰器、它的用途以及Python编程语言中的好处。要学习更多有关 Python 编程语言相关各种主题的易于理解且详细的文章,请查看我们的课程部分