В отношении уродливых хаков, вы всегда можете использовать комбинацию 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')