我正在阅读的代码使用@batch_transform
。 @
符号有什么作用?是ipython具体吗?
from zipline.transforms import batch_transform
from scipy import stats
@batch_transform
def regression_transform(data):
pep_price = data.price['PEP']
ko_price = data.price['KO']
slope, intercept, _, _, _ = stats.linregress(pep_price, ko_price)
return intercept, slope
答案 0 :(得分:2)
@
语法表示batch_transform
是一个Python装饰器,请在wiki中详细了解它,引用:
Python装饰器是对Python语法的一种特定更改,它允许我们更方便地更改函数和方法(以及未来版本中可能的类)。这支持DecoratorPattern的更易读的应用程序,但也支持其他用途
另请查看documentation:
函数定义可以由一个或多个装饰器表达式包装。在包含函数定义的作用域中定义函数时,将评估Decorator表达式。结果必须是可调用的,以函数对象作为唯一参数调用。返回的值绑定到函数名称而不是函数对象。多个装饰器以嵌套方式应用
答案 1 :(得分:1)
这是装饰师。一个Python装饰器。
函数,方法或类定义之前可能有一个称为装饰器的@
特殊符号,其目的是修改后面定义的行为。
装饰器用@符号表示,并且必须放在相应的函数,方法或类之前的单独一行上。这是一个例子:
class Foo(object):
@staticmethod
def bar():
pass
此外,您可以拥有多个装饰器:
@span
@foo
def bar():
pass
答案 2 :(得分:0)
任何函数都可以使用decorator
@
符号
例如
def decor(fun):
def wrapper():
print "Before function call"
print fun()
print "Before function call"
return wrapper
@decor
def my_function():
return "Inside Function"
my_function()
## output ##
Before function call
Inside Function
Before function call
[注意]即使classmethod
和staticmethod
使用python
中的装饰器实现
在你的情况下,会有一个名为batch_transform
的函数,你有imported
它!