用更好的方式重写我的简单Python代码

4

我有一个函数

def max_f(tup, val):
    max = tup[0](val)
    out = tup[0]
    for funz in tup:
        new = funz(val)
        if new > max: 
            max = new
            out = funz
    return out

我希望您能以更好的方式将其表达出来。我已经尝试过了。

def max_f2(tup, val):
    return (max(funz(val) for funz in tup))

但我应该返回一个函数,而不是一个值。我该怎么办呢?

以下是一些正确输出的示例。

tupleFunz=(lambda x: x + 3 ,lambda x: x * 2,lambda x: x % 2)
max_f(tupleFunz,4)(8) #=> 16
max_f(tupleFunz,1)(8) #=> 11 
1个回答

5
您可以使用max()函数和key参数与lambda函数来实现这一点:
def max_f(tup, val):
    return max(tup, key=lambda x: x(val))

输出:

>>> tupleFunz=(lambda x: x + 3 ,lambda x: x * 2,lambda x: x % 2)
>>> max_f(tupleFunz,4)(8)
16
>>> max_f(tupleFunz,1)(8)
11

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