Я хотел бы получить выражение из лямбда-функции, как это делает С#, и проанализировать его на что-то еще?
Пример в С#:
void Foo<T>(Expression<Func<T, bool>> expression
{
// ...
}
Foo<Baz>(someObj => someObj.HasBar);
Лямбда-оператор будет преобразован в выражение, которое можно проверить.
Что такое эквива лент в python?
Python предоставляет полный доступ к скомпилированной форме кода.
>>> f = lambda(x): 2*x
>>> f.func_code.co_code
'd\x00\x00|\x00\x00\x14S'
>>>
Вы можете, в принципе, перепроектировать это, чтобы выяснить выражение, хотя это не значит, что это так. Модуль dis может дать вам немного начало:
>>> import dis
>>> dis.dis(f)
1 0 LOAD_CONST 0 (2)
3 LOAD_FAST 0 (x)
6 BINARY_MULTIPLY
7 RETURN_VALUE
>>> dis.opname[ord(f.func_code.co_code[-2])]
'BINARY_MULTIPLY'
>>> dis.opname[ord(f.func_code.co_code[-1])]
'RETURN_VALUE'
>>>
gcc -S
...