需要帮助在python中使用map的函数

时间:2017-11-10 17:03:56

标签: python function

所以我写了一个函数f(a,b)。结构是:

def f(a, b):
    global result

    def g(a, b):
        global result
        return result

    deg h(a):
        return a  # an updated a

    g(a, b)
    a = h(a)
    g(a, b)
    a = h(a)
    g(a, b)
    a = h(a)
    g(a, b)
    return result
  • 您可以看到我有两个子功能g(a, b)h(a) f(a, b)
  • 我需要运行g(a, b)才能获得部分结果
  • 然后我更新了a
  • 这样我就可以再次运行g(a, b)来更新结果。
  • g(a, b)的4次运行之后,我得到了完整的结果并返回了值。

必须有一种方法来构建这里看起来更简单,更清晰的过程。

我也尝试过:

g(a, b)
g(h(a), b)
g(h(h(a), b)
g(h(h(h(a), b)

这看起来也很可怕。

我需要一些建议来简单地在这里构建,也许使用map()或其他高阶函数?但我无法理解。

谢谢!

2 个答案:

答案 0 :(得分:2)

首先你应该使用参数和返回值,而不是副作用(即返回或修改全局变量)。我发现使用global result会使你的代码无法读取,但我认为你是在询问动态函数组合,可以这样表达:

def compose(*fv):
    return reduce(lambda f, g: lambda x: f(g(x)), fv)

然后像这样使用(注意评估顺序是从右到左,这很常见):

def add1(x): return x + 1
def mul2(x): return x * 2

>>> compose(add1, add1, add1)(1)
4
>>> compose(mul2, add1, add1, add1)(1)
8

这在函数式语言中很常见,但我发现当你想在python中使用这个模式时,你的工作就不够简单了。

答案 1 :(得分:1)

如果您想要做的是这样的话:

g(a, b)
a = h(a)
g(a, b)
a = h(a)
g(a, b)
a = h(a)
g(a, b)

你可以这样做:

for i in range(4):
    g(a, b)
    a = h(a)
g(a, b)

更紧凑