【发布时间】:2010-10-28 18:15:00
【问题描述】:
这些周末,我一直在拆解 Michele Simionato 的 decorator module,它构建了保留签名的装饰器。这一切的核心是一个动态生成的函数,它的工作原理与此类似......
src = """def function(a,b,c) :\n return _caller_(a,b,c)\n"""
evaldict = {'_caller_' : _caller_}
code = compile(src, '<string>', 'single')
exec code in evaldict
new_func = evaldict[function]
我发现,用这段代码胡闹,编译步骤可以完全避免,只需要一个:
exec src in evaldict
现在,我确信这有充分的理由增加这一步,但我无法找到这两种方法之间的区别。性能?
既然我在问,是否可以使用 eval 来实现类似的东西,即定义一个新函数并获取它的句柄?我试过了,但无法让它工作......
【问题讨论】:
标签: python compilation eval exec