繁体   English   中英

在将地图用于python中的功能时需要帮助

[英]Need Help on using map for functions in python

所以我写了一个函数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
  • 您可以看到我在f(a, b)有两个子函数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()或其他高阶函数? 但是我只是想不通。

谢谢!

首先,您应该使用参数和返回值,而不要使用副作用(即返回或修改全局变量)。 我发现使用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中的这种模式时,并没有使事情变得足够简单。

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

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)

紧凑一点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM