2

我正在阅读的代码使用@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
4

3 回答 3

2

作为 Python 装饰器的@语法信号,请在wikibatch_transform中阅读有关它的更多信息,引用:

Python 装饰器是对 Python 语法的特定更改,它允许我们更方便地更改函数和方法(可能还有未来版本中的类)。这支持 DecoratorPattern 更具可读性的应用程序,但也支持其他用途

另请查看文档

一个函数定义可以由一个或多个装饰器表达式包装。定义函数时,在包含函数定义的范围内评估装饰器表达式。结果必须是可调用的,它以函数对象作为唯一参数进行调用。返回值绑定到函数名而不是函数对象。多个装饰器以嵌套方式应用

于 2013-11-07T18:49:26.080 回答
1

它是一个装饰器。一个 Python 装饰器。

函数、方法或类定义前面可能有一个@称为装饰器的特殊符号,其目的是修改后面定义的行为。

装饰器用@ 符号表示,并且必须放在一个单独的行上,紧挨着相应的函数、方法或类之前。这是一个例子:

class Foo(object):
    @staticmethod
    def bar():
        pass

此外,您可以拥有多个装饰器:

@span
@foo
def bar():
    pass

这是一个很好的教训。这是SO 的一个很好的主题

于 2013-11-07T18:51:04.977 回答
0

任何函数都可以使用decoratorby@符号包装

例子

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

[注意] 甚至classmethodstaticmethod's 是使用装饰器实现的python

在你的情况下,会有一个函数被调用batch_transform,你就有imported了!

于 2013-11-07T18:55:03.927 回答