3

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

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)

可能有一点我可能会错过这两种写作不同的地方?

4

1 回答 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 是一种语言,就像口语一样,关于如何使用它们的规定性规则往往会限制表达能力。我喜欢把它比作Newspeak

于 2014-10-23T14:35:51.697 回答