我正在从事purescript-python项目,有几个核心库广泛使用lambdas。由于代码的编译方式,lambda的位置最终变得模糊,每当出现错误时,就会产生奇怪的控制台消息
我希望重构这些库以尽可能少地使用lambdas。例如,如果有如下情况:
def foo(a):
return lambda b: lambda c: lambda d: lambda e: a + b + c + d + e
这将是很好的生成
def foo(a):
def _foo_internal_anon_1(b):
def _foo_internal_anon_2(c):
def _foo_internal_anon_3(d):
def _foo_internal_anon_4(e):
return a + b + c + d + e
return _foo_internal_anon_4
return _foo_internal_anon_3
return _foo_internal_anon_2
return _foo_internal_anon_1
有没有办法做到这一点,比如使用pylint
或vscode或pycharm插件,还是必须手工完成
可以使用自定义^{} 将} tool 来解析转换后的AST(从python3.9开始,您还可以使用^{} )。这允许转换整个脚本,而不仅仅是单个函数
Lambda
内的Return
节点转换为完整的函数定义。然后,可以借助CPython repo中的^{这是节点转换器:
它可以与^{} class 一起使用,如下所示(或者对于Python 3.9+,也可以与^{} 一起使用):
默认情况下,这会将结果打印到
sys.stdout
,但是Unparser
可以配置为使用任何文件,如对象:Unparser(tree, file=...)
这是针对示例函数获得的结果:
它在添加的内容周围添加了一些额外的空行和括号,但也可以通过修改
Unparser
类来定制不是完全自动的,但是可以使用^{} 替换函数中的各种
lambda
。也许您可以将其转换为您喜爱的IDE的宏,该宏允许您突出显示一些文本,然后在其上运行转换应用于示例函数:
这是输出:
相关问题 更多 >
编程相关推荐