Как получить исходные строки для лямбда-функций, используемых в качестве аргументов функции

#python

#python

Вопрос:

Я работаю с функцией, которая принимает лямбда-функции в качестве аргументов. Я хочу иметь возможность получать исходные строки для каждой лямбда-функции. Я пытался сделать это с помощью модуля inspect, но изо всех сил пытаюсь найти решение.

Приведенный ниже код иллюстрирует проблему:

 import inspect
def foo(**kwargs):
    return inspect.getsourcelines(kwargs["new"])
foo(new  = 
    lambda x: 
    x.var   1,
    old  =  lambda  x: x.var) 
 

Он возвращает «([‘ lambda x: n’], 6)». но чего я действительно хочу, так это «lambda x: x.var 1».

В качестве альтернативы мне нужен простой способ извлечь вызов функции в начале foo , который в этом случае выдал бы «foo (new = lambda x: x.var 1, old = lambda x: x.var)».

Здесь мне нужно перевести лямбда-функцию в вызов для языка программирования, отличного от Python. Итак, по сути, мне нужно проанализировать аргументы функции.

Комментарии:

1. ([' lambda x: x.var 1,n'], 6)[0][0] даст вам "lambda x: x.var 1"

2. Есть ли какая-либо причина foo , по которой напрямую не берется соответствующий источник, например foo(new="x: x.var 1", old="x: x.var") , или аналогичный? Как следует foo обращаться с функциями, предоставляемыми другими средствами, такими как лямбда-выражения, например, через name ?

3. @juanpa.arrivillaga это опечатка в части спрашивающих, inspect.getsourcelines не возвращает строку

4. Извинения. Пример был не совсем правильным. Теперь исправлено. Основная проблема заключается в том, что при foo разделении вызова на несколько строк inspect.getsourcelines получает только одну строку