@符号在Python中做什么?
当前回答
此代码段:
def decorator(func):
return func
@decorator
def some_func():
pass
相当于此代码:
def decorator(func):
return func
def some_func():
pass
some_func = decorator(some_func)
在装饰器的定义中,您可以添加一些通常不会由函数返回的修改后的内容。
其他回答
它表示您正在使用装饰器。这是布鲁斯·埃克尔2008年的例子。
此代码段:
def decorator(func):
return func
@decorator
def some_func():
pass
相当于此代码:
def decorator(func):
return func
def some_func():
pass
some_func = decorator(some_func)
在装饰器的定义中,您可以添加一些通常不会由函数返回的修改后的内容。
如果您引用的是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
@符号还用于访问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
推荐文章
- Visual Studio Code:如何调试Python脚本的参数
- 使用元组/列表等等。从输入vs直接引用类型如list/tuple/etc
- 结合conda环境。Yml和PIP requirements.txt
- 将命名元组转换为字典
- 如何使x轴和y轴的刻度相等呢?
- Numpy在这里函数多个条件
- 在Python中,使用argparse只允许正整数
- 如何排序mongodb与pymongo
- 不可变与可变类型
- 列表是线程安全的吗?
- 操作系统。makdirs在我的路径上不理解“~”
- 如何在Django模板中获得我的网站的域名?
- 在django Forms中定义css类
- 如何在Python中scp ?
- Numpy Max vs amax vs maximum