#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 получает только одну строку