python - python 中是否有与 Linq.Expressions.Expression 等效的东西?

标签 python expression-trees lambda

我希望能够像 C# 一样从 lambda 函数中获取表达式并将其解析为其他内容?
C# 示例:

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

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

lambda 运算符将被转换为可以检查的表达式。
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'
>>> 

关于python - python 中是否有与 Linq.Expressions.Expression 等效的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5786593/

相关文章:

python - 如何使用django-ckeditor在管理员中上传服务器上的文件和浏览器文件?

C++ 二进制表达式树 : How do I print an infix expression with appropriate parentheses?

c# - 表达式树和调用委托(delegate)

c# - 如何编写 linq 语句来获取一组记录中的最后一条记录

java - 使用 lambda 而不是显式匿名内部类时的不同泛型行为

python - 禁用类实例方法

python - 优化音频 DSP 程序的 numpy 计算

python - 内置 python 函数的时间/空间复杂度

c# - 如何动态创建 Expression<Func<MyClass, bool>> 谓词?

c++ - 通过引用传递对 lambda 的引用