Хотя я мог бы внести свой вклад, используйте прерыватель строки:
x = lambda x,y: x-y if x<y \
else y-x if y<x \
else 0
Не забывайте, что Python умеет писать на однослойных компьютерах, как в примере:
a=b=0; c=b+a; d = a+b**2 #etc etc
И лямбда очень мощная, но она не предназначена для замены одной целой функции, я имею в виду, что вы можете взломать ее так (пример заимствования у коллеги выше):
makeTag = lambda tagName: "<{}>".format(tagName)
closeTag = lambda tagName: makeTag("/"+str(tagName))
openTag = lambda tagName: makeTag(tagName)
writeHMTLline = lambda tag,content: ""+opetTag(tag)+str(content)+closeTag(tag)
Но вы действительно хотите сделать это так? Через некоторое время он становится практически нечитаемым, это похоже на начало веревки, начиная с распутанного конца.
Лямбды представлены как единственные функции в карте, фильтруют и сокращают функции в функционально-ориентированном программировании (среди прочего). Например, получение символьных значений значений, которые являются целыми числами и делятся на 2
chrDev2 = lambda INT: chr(INT) if isinstance(INT,int) and INT%2==0 else INT
someStringList = map( chrDev2, range(30) )
>>> ['\x00', 1, '\x02', 3, '\x04', 5, '\x06', 7, '\x08', 9, '\n', 11, '\x0c', 13, '\x0e', 15, '\x10', 17, '\x12', 19, '\x14', 21, '\x16', 23, '\x18', 25, '\x1a', 27, '\x1c', 29]
Вы можете использовать его как функцию выражения функции, определив сложную функцию (или несколько и более лямбда-выражений, и поместив ее в другую лямбду-выражение:
def someAnon(*args): return sum(list(args))
defAnon = lambda list: [ x*someAnon(*list) for x in list]
но в Python есть поддержка выражений функций по-другому: -lets говорят, что у вас есть вызванная функция, superAwesomeFunction
и эта функция может делать какие-то суперские вещи, вы можете назначить ее переменной, не вызывая ее, например:
SAF = superAwesomeFunction # there is no () at the end,
Поэтому теперь, когда вы вызываете SAF, вы вызываете superAwesomeFunction или метод. Если вы выполните поиск в папке Lib, вы обнаружите, что большинство __builtin__
модулей Python написаны именно так. Это сделано потому, что иногда вам понадобятся некоторые функции, которые выполняют определенную задачу, которая не является необходимой для использования пользователем, но необходима для нескольких функций. Итак, у вас есть выбор: вы не можете иметь 2 функции с именем «superAwesomeFunction», вы можете иметь «superAwesomeFunctionDoingBasicStuf» и «realSuperAwesomeFunction», а затем просто поместить «realSuperAwesomeFunction» в переменную «superAwesomeFunction», и все готово.
Вы можете найти расположение импортированных модулей, введя в консоли importedModule.__file__
(реальный пример import os;os.__file__
), и просто следуйте по этому каталогу в файл с именем importModule.py, откройте его в редакторе и найдите, как вы можете максимизировать свои собственные «знания».
Я надеюсь, что это поможет вам и другим коллегам, попавшим в беду.