用于在Python中抽象特殊情况的装饰器或包装器函数

时间:2017-05-06 16:23:52

标签: python function wrapper python-decorators

我发现自己写了很多明确的陈述,如下所示:

...inside a larger loop over i:

if i == 0:
    y = ... # some value specifically for i = 0
    x[i] = func(y, z)
elif i == iMax:
    y = ... # some value specifically for i = iMax
    x[i] = func(y, z)
else:
    x[i] = func(y, z)
    #'z' some other input that does not depend on i to generalize the example

除了编写另一个函数的简单答案之外,似乎应该有更抽象或pythonic的方式来实现这个构造:

def new_func(i, y, z):
    #--- get y based on i
    x = func(y, z)
return x

虽然这可能是一个风格问题,但我一直在看这个范例与不同的' func',所以我想有装饰器或包装器解决方案来简化这个接受各种功能' func&# 39;但是我还没有完成任务并认为社区反馈会有所帮助 - 想法?

澄清/扩展: 以下解决方案只解决了简单的案例:

if i == 0:
    y = 0 #...some value
elif i == iMax:
    y = 1 #... some other value
else:
    y = 0.5 #... some non-limiting value
x = func(y, z)

我正在研究下一级抽象。下面是一个简单的示例,您将在1d数组中进行插值以获得值' z'用于评估另一个函数' func2'生产' y'然后计算一个新的' x'通过原始功能' func'

if i == 0:
    y = func2(z[i])
elif i == iMax:
    y = func2(z[i-1])
else:
    y = func2(0.5*(z[i-1] + z[i])
x = func(y)

提出问题的另一种方法是"什么是嵌套函数的首选方法,以便外部函数返回一个中间值' y'基于循环索引' i'然后由内部函数' func'"?

进行评估

0 个答案:

没有答案