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)

そして、これら 2 つの記述の違いを見逃す可能性がある点はありますか?

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 に答える