@符号在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
其他回答
它表示您正在使用装饰器。这是布鲁斯·埃克尔2008年的例子。
行开头的@符号用于类和函数修饰符:
PEP 318:装饰Python装饰器
最常见的Python装饰器有:
@财产@分类法@静态方法
行中间的@可能是矩阵乘法:
@作为二进制运算符。
在Python 3.5中,可以将@重载为运算符。它被命名为__matmul__,因为它被设计用于矩阵乘法,但它可以是任何你想要的。详见PEP465。
这是矩阵乘法的简单实现。
class Mat(list):
def __matmul__(self, B):
A = self
return Mat([[sum(A[i][k]*B[k][j] for k in range(len(B)))
for j in range(len(B[0])) ] for i in range(len(A))])
A = Mat([[1,3],[7,5]])
B = Mat([[6,8],[4,2]])
print(A @ B)
此代码产生:
[[18, 14], [62, 66]]
用不同的方式来表达别人的想法:是的,这是一个装饰师。
在Python中,它类似于:
创建函数(在@call下面)调用另一个函数对创建的函数进行操作。这将返回一个新函数。您调用的函数是@的参数。用返回的新函数替换定义的函数。
这可以用于各种有用的事情,因为函数是对象,只是必要的指令。
此代码段:
def decorator(func):
return func
@decorator
def some_func():
pass
相当于此代码:
def decorator(func):
return func
def some_func():
pass
some_func = decorator(some_func)
在装饰器的定义中,您可以添加一些通常不会由函数返回的修改后的内容。
推荐文章
- 从matplotlib中的颜色映射中获取单个颜色
- 将Pandas或Numpy Nan替换为None以用于MysqlDB
- 使用pandas对同一列进行多个聚合
- 使用Python解析HTML
- django MultiValueDictKeyError错误,我如何处理它
- 如何在for循环期间修改列表条目?
- 我如何在Django中创建一个鼻涕虫?
- 没有名为'django.core.urlresolvers'的模块
- 蟒蛇导出环境文件
- Django - makemigrations -未检测到任何更改
- SQLAlchemy:引擎、连接和会话差异
- 在Python Pandas中删除多个列中的所有重复行
- 更改pandas DataFrame中的特定列名
- 将Pandas多索引转换为列
- 熊猫在每组中获得最高的n个记录