@符号在Python中做什么?


当前回答

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

在Python中,它类似于:

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

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

其他回答

它表示您正在使用装饰器。这是布鲁斯·埃克尔2008年的例子。

@可以是数学运算符或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/

@符号还用于访问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

Python装饰器就像函数或类的包装器。这还是太概念化了。

def function_decorator(func):
    def wrapped_func():
        # Do something before the function is executed
        func()
        # Do something after the function has been executed
    return wrapped_func

上面的代码是装饰函数的装饰器的定义。function_decorator是装饰器的名称。

wrapped_func是内部函数的名称,实际上它只在这个decorator定义中使用。func是被修饰的函数。在内部函数wrapped_func中,我们可以在调用func之前和之后执行任何操作。在定义了decorator之后,我们只需按如下方式使用它。

@function_decorator
def func():
    pass

然后,每当我们调用函数func时,我们在decorator中定义的行为也将被执行。

例子:

from functools import wraps

def mydecorator(f):
    @wraps(f)
    def wrapped(*args, **kwargs):
        print "Before decorated function"
        r = f(*args, **kwargs)
        print "After decorated function"
        return r
    return wrapped

@mydecorator
def myfunc(myarg):
    print "my function", myarg
    return "return value"

r = myfunc('asdf')
print r

输出:

    Before decorated function
    my function asdf
    After decorated function
    return value

行开头的@符号用于类和函数修饰符:

PEP 318:装饰Python装饰器

最常见的Python装饰器有:

@财产@分类法@静态方法

行中间的@可能是矩阵乘法:

@作为二进制运算符。