Lembre-se de que as respostas aceitas funcionam apenas se o lambda for fornecido em uma linha separada. Se você o passar como argumento para uma função e desejar recuperar o código do lambda como objeto, o problema será um pouco complicado, pois inspect
fornecerá toda a linha.
Por exemplo, considere um arquivo test.py
:
import inspect
def main():
x, f = 3, lambda a: a + 1
print(inspect.getsource(f))
if __name__ == "__main__":
main()
A execução dá a você (preste atenção à indentação!):
x, f = 3, lambda a: a + 1
Para recuperar o código fonte do lambda, sua melhor aposta, na minha opinião, é analisar novamente o arquivo fonte inteiro (usando f.__code__.co_filename
) e corresponder o nó AST lambda pelo número da linha e seu contexto.
Tivemos que fazer exatamente isso em nosso contrato de icon -library por contrato de design, pois tivemos que analisar as funções lambda que passamos como argumentos para os decoradores. É muito código para colar aqui, então dê uma olhada na implementação desta função .