@符号在iPython / Python中的作用是什么

时间:2013-11-07 18:48:52

标签: python python-2.7 ipython ipython-notebook zipline

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

3 个答案:

答案 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

这是一个good lesson。这是great thread on it for SO

答案 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

[注意]即使classmethodstaticmethod使用python中的装饰器实现

在你的情况下,会有一个名为batch_transform的函数,你有imported它!