我很好奇是否可以使用几个条件函数,然后创建一个检查所有条件函数的函数(例如,生成器遍历一个序列并创建迭代器的过程)。在
基本的使用情况是当您有大量的条件参数(例如“max_a”、“min_a”、“max_b”、“min_b”等),其中许多参数可能是空的。它们都将被传递给这个“函数创建”函数,然后返回一个检查它们的函数。下面是一个很天真的方法来完成我的要求:def combining_function(max_a, min_a, max_b, min_b, ...):
f_array = []
if max_a is not None:
f_array.append( lambda x: x.a < max_a )
if min_a is not None:
f_array.append( lambda x: x.a > min_a )
...
return lambda x: all( [ f(x) for f in f_array ] )
我想知道的是,实现上述目标最有效的方法是什么?似乎对f峎u数组中的每个函数执行函数调用会产生相当大的开销,但可能我正在进行过早/不必要的优化。不管怎样,我很想看看是否有人遇到过这样的使用案例,以及它们是如何进行的。在
另外,如果这在Python中是不可能的,那么在其他(也许是更具功能性的)语言中是可能的吗?在
EDIT:看起来一致的解决方案是组合一个包含全部条件集合的字符串,然后使用exec或eval生成一个函数。@doublep认为这是相当老套的。你觉得这有多糟糕吗?在编写函数时,仔细检查参数是否合理,这样的解决方案可以被认为是安全的?毕竟,无论需要什么严格的检查,只需要执行一次,而更快的组合条件的好处可以通过大量调用累积起来。人们是在部署场景中使用这样的东西,还是这主要是一种可以玩弄的技术?在