编写高阶函数的最佳Pythonic方式

3

这应该是一个非常基本的问题,但我想知道处理高阶函数最pythonic的方式是什么。我已经定义了fg

def f(x):
    return x**2

def g(x):
    return x**3

def gen_func(f,g):
    def func(x):
        return f(x)+g(x)
    return func

wanted_func = gen_func(f, g)

或者:

import functools

def gen_func(f,g,x):
    return f(x)+g(x)

wanted_func = functools.partial(gen_func, f, g)

这两种写法可能存在我会错过的细微差别吗?


1
你的意思是在 gen_func 中有 return func 吗? - Will Vousden
是的,那是一个笔误:已经修改了! - Colonel Beauvel
有关函数组合,请参见 -> https://dev59.com/2WrWa4cB1Zd3GeqP-27b - wim
1
你所拥有的,第一种方式已经很清晰且符合Pythonic了。 - wim
1个回答

1

假设您没有在其他地方使用gen_func,则可以使用以下一行代码替代它:

wanted_func = functools.partial(lambda f, g, x: f(x) + g(x), f, g)

...但这样并不容易阅读,而且部分函数应用实际上是多余的。最好直接写成:

wanted_func = lambda x: f(x) + g(x)

但是,就你提供的例子而言,我不知道它们之间有什么区别,所以最终决定权在于你。我建议避免“Pythonic”教条主义,只需使用你认为最易读的方式和对你特定用例最合适的方式,而不是Python社区认为正确的方式。

请记住,Python是一种语言,就像口头语言一样,关于如何使用它们的规定性规则往往会限制表达能力。我喜欢将其与新话进行比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接