Перепишите мой простой Python код в лучшем режиме - PullRequest
4 голосов
/ 19 февраля 2020

У меня есть функция

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 голосов
/ 19 февраля 2020

Вы можете сделать это, используя max() и аргумент key с лямбда-функцией:

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
...