Tenga en cuenta que las respuestas aceptadas funcionan solo si la lambda se proporciona en una línea separada. Si lo pasa como argumento a una función y desea recuperar el código de lambda como objeto, el problema se vuelve un poco complicado ya que inspect
le dará toda la línea.
Por ejemplo, considere un archivo test.py
:
import inspect
def main():
x, f = 3, lambda a: a + 1
print(inspect.getsource(f))
if __name__ == "__main__":
main()
Ejecutarlo te da (¡cuidado con la sangría!):
x, f = 3, lambda a: a + 1
Para recuperar el código fuente de la lambda, su mejor opción, en mi opinión, es volver a analizar todo el archivo fuente (usando f.__code__.co_filename
) y hacer coincidir el nodo AST lambda por el número de línea y su contexto.
Tuvimos que hacer precisamente eso en nuestro resumen de iconos de la biblioteca de diseño por contrato ya que tuvimos que analizar las funciones lambda que pasamos como argumentos a los decoradores. Es demasiado código para pegar aquí, así que eche un vistazo a la implementación de esta función .