Нет многострочной лямбды в Python: почему бы и нет? - PullRequest
275 голосов
/ 05 августа 2009

Я слышал, что в Python нельзя добавить многострочные лямбды, потому что они синтаксически конфликтуют с другими синтаксическими конструкциями в Python.Сегодня я думал об этом в автобусе и понял, что не могу придумать ни одной конструкции Python, с которой сталкиваются многострочные лямбды.Учитывая, что я довольно хорошо знаю язык, это меня удивило.

Теперь я уверен, что у Гвидо была причина не включать многострочные лямбды в язык, но из любопытства: в какой ситуации включение многострочноголямбда была бы неоднозначной?Верно ли то, что я слышал, или есть какая-то другая причина, по которой Python не допускает многострочные лямбды?

Ответы [ 11 ]

0 голосов
/ 10 августа 2018

В отношении уродливых хаков, вы всегда можете использовать комбинацию exec и обычную функцию для определения многострочной функции, например:

f = exec('''
def mlambda(x, y):
    d = y - x
    return d * d
''', globals()) or mlambda

Вы можете заключить это в функцию как:

def mlambda(signature, *lines):
    exec_vars = {}
    exec('def mlambda' + signature + ':\n' + '\n'.join('\t' + line for line in lines), exec_vars)
    return exec_vars['mlambda']

f = mlambda('(x, y)',
            'd = y - x',
            'return d * d')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...