使用Python进行正态顺序参数评估

时间:2017-09-30 00:18:53

标签: python lambda

是否可以更改Python的默认行为,以便传递给函数的参数仅在传递后进行评估?

而不是:

(lambda x: x)(str(1))

在将参数传递给函数之前完成字符串转换,我最后想到了这种情况:

(lambda x: x())((lambda: str(1)))

由于延迟包装函数,现在将参数移动到函数后完成了str cast。

我对AST不太熟悉,但是它可以用来自动延迟功能参数的评估吗?

1 个答案:

答案 0 :(得分:3)

这就是做到这一点的方式,就像现在一样。这些类型的构造(作为参数传递给其他函数的函数)通常被称为"工厂函数"或者"工厂",当你需要做多件事时,它们经常是全功能的。有时人们在为类实现替代构造函数时会使它们成为@classmethod(这些类方法的名称通常以&#34开头;来自",即fromIterable())。但是如果你可以使用lambda,那么simple比复杂更好。

另外,顺便提一句,你在第二个例子中错过了一个关闭的人。

编辑:看起来你修好了。

另外,至于AST - 理论上,是的。您可以将AST传递给函数eval(),它会对它进行评估。但是你也可以传递一个字符串,手工创建AST过于复杂。你真的不想进入那个。更不用说eval()exec()因为能够执行任意Python代码而被弃用,因此如果您在用户输入上调用它,则恶意用户可以逐字地断言Python解释器

底线:lambdas是要走的路,尽管可能很难过。