@符号在Python中做什么?


当前回答

用不同的方式来表达别人的想法:是的,这是一个装饰师。

在Python中,它类似于:

创建函数(在@call下面)调用另一个函数对创建的函数进行操作。这将返回一个新函数。您调用的函数是@的参数。用返回的新函数替换定义的函数。

这可以用于各种有用的事情,因为函数是对象,只是必要的指令。

其他回答

如果您引用的是python笔记本中使用Numpy库的一些代码,则@operator表示矩阵乘法。例如:

import numpy as np
def forward(xi, W1, b1, W2, b2):
    z1 = W1 @ xi + b1
    a1 = sigma(z1)
    z2 = W2 @ a1 + b2
    return z2, a1

实例

class Pizza(object):
    def __init__(self):
        self.toppings = []

    def __call__(self, topping):
        # When using '@instance_of_pizza' before a function definition
        # the function gets passed onto 'topping'.
        self.toppings.append(topping())

    def __repr__(self):
        return str(self.toppings)

pizza = Pizza()

@pizza
def cheese():
    return 'cheese'
@pizza
def sauce():
    return 'sauce'

print pizza
# ['cheese', 'sauce']

这表明,在装饰器之后定义的函数/方法/类基本上只是作为参数传递给@符号之后的函数/函数。

第一次目击

微框架Flask从一开始就以以下格式介绍装饰器:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

这反过来又转化为:

rule      = "/"
view_func = hello
# They go as arguments here in 'flask/app.py'
def add_url_rule(self, rule, endpoint=None, view_func=None, **options):
    pass

意识到这一点,我终于可以和弗拉斯克和平相处了。

@可以是数学运算符或DECORATOR,但您的意思是DECORATOR。

此代码:

def func(f):
    return f

func(lambda :"HelloWorld")()

使用decorator可以写成:

def func(f):
    return f
@func
def name():
    return "Hello World"

name()

装饰器可以有参数。

你可以看到这个GeeksforGeeks帖子:https://www.geeksforgeeks.org/decorators-in-python/

从Python 3.5开始,“@”用作矩阵乘法的专用中缀符号(PEP 0465——请参见https://www.python.org/dev/peps/pep-0465/)

@符号还用于访问plydata/pandas数据帧查询pandas.dataframe.query中的变量。例子:

df = pandas.DataFrame({'foo': [1,2,15,17]})
y = 10
df >> query('foo > @y') # plydata
df.query('foo > @y') # pandas