有没有一辆马车Linq.Expressions.Expression表达式在python中?

2024-10-04 11:23:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够像C#一样从lambda函数中得到表达式,并将其解析为其他函数?
C#中的示例:

void Foo<T>(Expression<Func<T, bool>> expression
{
// ...
}

Foo<Baz>(someObj => someObj.HasBar);

lambda运算符将被转换为可以检查的表达式。
python中的equilivent是什么?你知道吗


Tags: lambda函数示例foo表达式运算符bazbool
1条回答
网友
1楼 · 发布于 2024-10-04 11:23:57

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'
>>> 

相关问题 更多 >