使用python装饰器缩放翻译功能

时间:2017-07-19 17:46:46

标签: python python-decorators

我在python中有一个单参数函数列表,我想要应用相同的缩放/转换操作。

函数f(x)的缩放/平移如下:

f'(x,a,b,c,d)= a + b * f(c *(x - d))

例如,如果我的原始函数定义为:

f(x)= 3 * x

我想将其修改为:

f'(x,a,b,c,d)= a + b *(3 *(c *(x - d)))

理想情况下使用装饰器(或其他一些可以应用于列表中每个函数的可重用操作)。

是否有一种pythonic方法来实现这一点,以便每个转换都不需要为我拥有的每个函数进行硬编码?

如果问题不清楚,请道歉 - 事先感谢任何建议。

1 个答案:

答案 0 :(得分:1)

<div id="top_navbar">
  <ul>
    <li>
      <a href="https://accounts.google.com/signin/v2/identifier?flowName=GlifWebSignIn&flowEntry=ServiceLogin" class="Gmail" target="_blank">Gmail</a>
    </li>
    <li>
      <a href="https://images.google.ca/" class="Images" target="_blank">Images</a>
    </li>
    <li>
      <div onclick="myFunction()"><i class="material-icons apps">apps</i></div>
    </li>
    <li>
      <a href="#"><i class="material-icons notifications">notifications</i></a>
    </li>
    <li>
      <a href="#"><i class="material-icons account">account_circle</i></a>
    </li>
  </ul>
</div>

这给出了例如:

def f(x):
    return 3*x

def makeFPrime(func):
    def inner(x, a, b, c, d):
        return a + b * (3*(c*func(x-d)))
    return inner

或者,使用f2 = makeFPrime(f) f2(2,1,1,1,2) 1 f2(2,1,1,1,0) 19 作为装饰者:

makeFPrime

然后f(2,1,1,1,2)返回1