Si je pouvais contribuer, utilisez un disjoncteur:
x = lambda x,y: x-y if x<y \
else y-x if y<x \
else 0
N'oubliez pas la très belle chose que python est capable d'écrire sur les marqueurs, comme dans l'exemple:
a=b=0; c=b+a; d = a+b**2 #etc etc
Et le lambda est très puissant, mais il n’est pas destiné à la substitution d’une fonction entière, je veux dire que vous pourriez le pirater comme (exemple emprunté à un collègue ci-dessus):
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)
Mais voulez-vous vraiment le faire comme ça? Il est généralement illisible au bout d’un certain temps, c’est comme aller au début de la corde en commençant par la fin non déchirée.
Les Lambdas sont des fonctions uniques, dans la carte, filtrent et réduisent les fonctions dans la programmation orientée fonctionnelle (entre autres). Par exemple, obtenir des valeurs de caractère de valeurs qui sont des entiers et divisibles par 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]
Vous pouvez l'utiliser comme expression de fonction pour diviser la fonction complexe (ou plusieurs et plusieurs lambdas, et l'insérer dans un autre lambda:
def someAnon(*args): return sum(list(args))
defAnon = lambda list: [ x*someAnon(*list) for x in list]
mais Python prend en charge les expressions de fonction d'une autre manière: les -lets disent que vous avez une fonction appelée superAwesomeFunction
et que cette fonction peut faire des choses super impressionnantes, vous pouvez l'affecter à une variable en ne l'appelant pas, comme ceci:
SAF = superAwesomeFunction # there is no () at the end,
Alors maintenant, lorsque vous appelez SAF, vous appelez superAwesomeFunction ou sa méthode. Si vous effectuez une recherche dans votre dossier Lib, vous constaterez que la plupart des __builtin__
modules python sont écrits de cette façon. Ceci est fait parce que parfois vous aurez besoin de fonctions qui font une tâche spécifique qui n’est pas assez nécessaire pour être utilisable par l’utilisateur mais qui est nécessaire pour plusieurs fonctions. Donc vous avez le choix. Vous ne pouvez pas avoir 2 fonctions portant le nom "superAwesomeFunction", vous pouvez avoir "superAwesomeFunctionDoingBasicStuf" et "realSuperAwesomeFunction" et ne mettre que la variable "realSuperAwesomeFunction" dans la variable "superAwesomeFunction" et vous avez terminé.
Vous pouvez trouver l'emplacement des modules importés en entrant dans console importedModule.__file__
(exemple réel import os;os.__file__
), puis suivez ce répertoire dans le fichier importsModule.py et ouvrez-le dans l'éditeur pour trouver comment vous pouvez maximiser vos propres "connaissances".
J'espère que cela vous aidera, vous et d'autres collègues en difficulté, peut-être.