@符号在Python中做什么?
当前回答
“at”(@)符号在Python中做什么?
@符号是python提供的利用装饰器的语法糖,套用一个问题,这正是关于decorator在Python中做什么的?
简单地说,decorator允许您修改给定函数的定义,而不触及其最内部(它是闭包)。当你从第三方进口精彩的包装时,这是最常见的情况。你可以想象它,你可以使用它,但你不能触摸它的内心和内心。
这里是一个快速示例,假设我在Ipython上定义了read_a_book函数
In [9]: def read_a_book():
...: return "I am reading the book: "
...:
In [10]: read_a_book()
Out[10]: 'I am reading the book: '
你看,我忘了给它加个名字。如何解决这样的问题?当然,我可以将函数重新定义为:
def read_a_book():
return "I am reading the book: 'Python Cookbook'"
然而,如果不允许我操作原始函数,或者如果有数千个这样的函数需要处理,该怎么办。
通过不同的思维来解决问题,并定义一个新的函数
def add_a_book(func):
def wrapper():
return func() + "Python Cookbook"
return wrapper
然后使用它。
In [14]: read_a_book = add_a_book(read_a_book)
In [15]: read_a_book()
Out[15]: 'I am reading the book: Python Cookbook'
塔达,你看,我修改了read_a_book,但没有触及它的内部封口。没有什么能阻止我配备装修工。
关于什么@
@add_a_book
def read_a_book():
return "I am reading the book: "
In [17]: read_a_book()
Out[17]: 'I am reading the book: Python Cookbook'
@add_a_book是一种新奇而方便的方式来表示read_a_book=add_a_bok(read_a_bok),这是一种语法糖,没有什么比它更令人着迷的了。
其他回答
@符号还用于访问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 3.5开始,“@”用作矩阵乘法的专用中缀符号(PEP 0465——请参见https://www.python.org/dev/peps/pep-0465/)
它表示您正在使用装饰器。这是布鲁斯·埃克尔2008年的例子。
行开头的@符号用于类和函数修饰符:
PEP 318:装饰Python装饰器
最常见的Python装饰器有:
@财产@分类法@静态方法
行中间的@可能是矩阵乘法:
@作为二进制运算符。
如果您引用的是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
推荐文章
- 从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个记录