我希望能够像 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/