如何在python中准确获取lambda函数的代码?
我想知道是否有办法获得以下lambda函数的代码:如何在python中准确获取lambda函数的代码?,python,function,lambda,Python,Function,Lambda,我想知道是否有办法获得以下lambda函数的代码: a = {"test": lambda x: x + 123, "test2": lambda x: x + 89} 有什么方法可以让你喜欢它吗 print(getsource(a["test"]) 这将返回: lambda x: x + 123 我已经知道inspect和dill getsource函数,但是下面的代码: import inspect import dill if __name__ == "__main__":
a = {"test": lambda x: x + 123, "test2": lambda x: x + 89}
有什么方法可以让你喜欢它吗
print(getsource(a["test"])
这将返回:
lambda x: x + 123
我已经知道inspect和dill getsource函数,但是下面的代码:
import inspect
import dill
if __name__ == "__main__":
a = {"test": lambda x: x + 123, "test2": lambda x: x + 89}
print(inspect.getsource(a["test"]))
print(dill.source.getsource(a["test"]))
返回:
a = {"test": lambda x: x + 123, "test2": lambda x: x + 89}
a = {"test": lambda x: x + 123, "test2": lambda x: x + 89}
我遇到了同样的问题,所以我写了一些代码,我相信至少可以部分解决这个问题
def get_lambda_source(lambda_func, position):
import inspect
import ast
import astunparse
code_string = inspect.getsource(lambda_func).lstrip()
class LambdaGetter(ast.NodeTransformer):
def __init__(self):
super().__init__()
self.lambda_sources = []
def visit_Lambda(self, node):
self.lambda_sources.append(astunparse.unparse(node).strip()[1:-1])
def get(self, code_string):
tree = ast.parse(code_string)
self.visit(tree)
return self.lambda_sources
return LambdaGetter().get(code_string)[position]
就你而言
print(get_lambda_source(a['test'], 0]))
返回
lambda x: x + 123
注意这在shell中不起作用。下面的函数
mygetsource
如何
import inspect
def mygetsource(l, n):
s = inspect.getsource(l[n])
s = s[s.index('{')+1:-2]
d = {x[1:x.index(':')-1]: x[x.index(':')+2:] for x in s.split(', ')}
return d[n]
a = {"test": lambda x: x + 123, "test2": lambda x: x + 89}
print(mygetsource(a, "test"))
print(mygetsource(a, "test2"))
b = {'func1': lambda y: y * 10, 'func2': lambda z: z ** z}
print(mygetsource(b, "func1"))
print(mygetsource(b, 'func2'))
结果如下:
lambda x: x + 123
lambda x: x + 89
lambda y: y * 10
lambda z: z ** z
a[“test”]
没有给你lambda
函数的代码吗?嗨,谢谢你的回复,很遗憾没有,我只得到:你到底在找什么lambda x:x+123
作为字符串?是的,我想将lambda函数定义打印为字符串。这能解决您的问题吗?明亮的这是万无一失的,很好。但这也需要第三方astunbrase
软件包,而且速度非常慢,不太好。当然,无论哪种方式,你都可以选择毒药<代码>