gpt4 book ai didi

python - 有/没有事先编译的 exec 语句

转载 作者:太空宇宙 更新时间:2023-11-04 11:06:01 24 4
gpt4 key购买 nike

这个周末我一直在撕毁 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 实现类似的事情,即定义一个新函数并获取它的句柄?我试过了,但无法让它工作...

最佳答案

我看到了一些差异。首先,compile在语法错误方面比 exec 有更好的语义.我怀疑真正的原因是 compile 的定义对于换行符的处理非常明确,而 exec 则不太精确。

我很好奇为什么使用 compileexec 代替内部函数。我不知道 compile/exec 可以让您控制可用的全局变量。非常有趣。

关于python - 有/没有事先编译的 exec 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/906920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com