Myślałem, że mógłbym się przyłączyć, użyć przerywacza linii:
x = lambda x,y: x-y if x<y \
else y-x if y<x \
else 0
Nie zapominaj o bardzo miłej rzeczy, jaką Python potrafi pisać oneliner, jak na przykład:
a=b=0; c=b+a; d = a+b**2 #etc etc
I lambda jest bardzo potężna, ale nie jest przeznaczona do zastąpienia 1 całej funkcji, to znaczy możesz ją zhakować (przykład pożyczenia od kolegi powyżej):
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)
Ale czy naprawdę chcesz to zrobić w ten sposób? Po pewnym czasie jest to w większości nieczytelne, to jak dotarcie do początku liny, zaczynając od nierozwiniętego końca.
Lambdas są traktowane jako funkcje jednorazowe, w mapowaniu, filtrowaniu i zmniejszaniu funkcji w funkcyjnym programowaniu (między innymi). Na przykład uzyskanie wartości znakowych wartości, które są liczbami całkowitymi i podzielnymi przez 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]
Możesz użyć go jako funkcji wyrażania funkcji, definiując złożoną funkcję (lub więcej i kilka lambd, i umieszczając ją w innej lambda:
def someAnon(*args): return sum(list(args))
defAnon = lambda list: [ x*someAnon(*list) for x in list]
ale Python ma obsługę wyrażeń funkcji w inny sposób: -lets mówi, że masz wywoływaną funkcję superAwesomeFunction
i że ta funkcja może robić super niesamowite rzeczy, możesz przypisać ją do zmiennej, nie wywołując jej, tak jak to:
SAF = superAwesomeFunction # there is no () at the end,
Więc teraz, gdy wywołasz SAF, wywołasz superAwesomeFunction lub metodę. Jeśli przeszukujesz folder Lib, możesz zauważyć, że większość __builtin__
modułów Pythona jest napisana w ten sposób. Dzieje się tak, ponieważ czasami będziesz potrzebować niektórych funkcji, które wykonują określone zadania, które nie są wystarczająco potrzebne, aby były użyteczne dla użytkownika, ale są niezbędne dla kilku funkcji. Zatem masz wybór, że nie możesz mieć 2 funkcji o nazwie „superAwesomeFunction”, możesz mieć „superAwesomeFunctionDoingBasicStuf” i „realSuperAwesomeFunction”, a następnie po prostu wstawić „realSuperAwesomeFunction” w zmiennej „superAwesomeFunction” i gotowe.
Możesz znaleźć lokalizację zaimportowanych modułów, wchodząc do konsoli importedModule.__file__
(prawdziwy przykład import os;os.__file__
), i po prostu podążaj za tym katalogiem do pliku o nazwie importModule.py i otwórz go w edytorze i dowiedz się, jak zmaksymalizować własną „wiedzę”.
Mam nadzieję, że to pomoże tobie i innym współpracownikom w tarapatach.