Veuillez noter que les réponses acceptées ne fonctionnent que si le lambda est donné sur une ligne séparée. Si vous le passez en tant qu'argument d'une fonction et que vous souhaitez récupérer le code du lambda en tant qu'objet, le problème se complique un peu car inspect
vous donnera la ligne entière.
Par exemple, considérons un fichier test.py
:
import inspect
def main():
x, f = 3, lambda a: a + 1
print(inspect.getsource(f))
if __name__ == "__main__":
main()
En l'exécutant, vous obtenez (attention à l'indentation !) :
x, f = 3, lambda a: a + 1
Pour récupérer le code source de la lambda, votre meilleure chance, à mon avis, est de ré-analyser le fichier source entier (en utilisant f.__code__.co_filename
) et faire correspondre le nœud lambda AST par le numéro de ligne et son contexte.
C'est précisément ce que nous avons dû faire dans notre bibliothèque de conception par contrat. icontrat puisque nous avons dû analyser les fonctions lambda que nous passons en tant qu'arguments aux décorateurs. Il y a trop de code à coller ici, alors jetez un coup d'oeil à l'implémentation de cette fonction .