Ho pensato di poter contribuire, utilizzare un interruttore di linea:
x = lambda x,y: x-y if x<y \
else y-x if y<x \
else 0
Non dimenticare la cosa molto bella che Python è in grado di scrivere oneliners, come nell'esempio:
a=b=0; c=b+a; d = a+b**2 #etc etc
E la lambda è molto potente, ma non è pensata per la sostituzione di 1 intera funzione, intendo che potresti hackerarla come (prendendo in prestito un esempio dal collega sopra):
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)
Ma vuoi davvero farlo in questo modo? È per lo più illeggibile dopo un po 'di tempo, è come arrivare all'inizio della corda iniziando con una fine non spiegata.
Le lambda sono menzionate come una sola funzione, nella mappa, filtrano e riducono le funzioni nella programmazione orientata al funzionamento (tra le altre cose). Ad esempio, ottenere valori di caratteri di valori che sono numeri interi e divisibili per 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]
Puoi usarlo come funzione expresions deifigendo una funzione complessa (o più e più lambda e inserendola in un'altra lambda:
def someAnon(*args): return sum(list(args))
defAnon = lambda list: [ x*someAnon(*list) for x in list]
ma Python ha il supporto delle espressioni di funzione in un altro modo: -let dicono che hai una funzione chiamata superAwesomeFunction
e che la funzione può fare cose super fantastiche, puoi assegnarla a una variabile non chiamandola, in questo modo:
SAF = superAwesomeFunction # there is no () at the end,
Quindi ora quando chiami SAF chiamerai superAwesomeFunction o metodo. Se cerchi attraverso la tua cartella Lib puoi scoprire che la maggior parte dei __builtin__
moduli Python sono scritti in questo modo. Questo viene fatto perché a volte sono necessarie alcune funzioni che svolgono attività specifiche che non sono abbastanza necessarie per essere utilizzabili dall'utente ma è necessario per diverse funzioni. Quindi hai una scelta che non puoi avere 2 funzioni con il nome "superAwesomeFunction", puoi avere "superAwesomeFunctionDoingBasicStuf" e "realSuperAwesomeFunction" e non solo inserire la "realSuperAwesomeFunction" nella variabile "superAwesomeFunction" e il gioco è fatto.
Puoi trovare la posizione dei moduli importati entrando nella console importedModule.__file__
(esempio reale import os;os.__file__
), e basta seguire quella directory per il file chiamato ImportModule.py e aprirlo nell'editor e scoprire come massimizzare la tua "conoscenza".
Spero che questo aiuti te e forse altri colleghi nei guai.