使用eval的泛型函数可以使用吗?

时间:2018-01-19 14:26:38

标签: python eval generic-programming

我知道,eval() 邪恶

我确信有更好的方法。

这只是解决问题的一般问题。

您如何使用eval()来使功能更通用?

在一个非常简单的例子中,它看起来像这样:

def generic_eval_func(a, operator, b):
    return eval('a '+operator+' b')    

if __name__ == '__main__':
    a = 6
    b = 7
    print generic_eval_func(a, '<', b)

我还没有使用过这样的功能。

但是当我想到如何使函数更通用时,它会时不时地浮现在我的脑海中。

不是有两个函数subtract(a,b) add(a, b),而是有一个函数operation(a, '+', b)operation(a, '-', b)operation(a, '<', b)

我真的不确定。

2 个答案:

答案 0 :(得分:3)

如果您对简单的算术运算感兴趣,可以使用运算符

from functools import reduce  # Python 3
import operator

print(reduce(operator.__sub__, (6,7)) )
print(reduce(operator.__add__, [6,7]) ) # you can pass a list as well.

对于像<这样的其他运算符我猜你最好使用lambda函数

答案 1 :(得分:1)

我的想法是thread。您必须已经阅读过它,但是......在您的情况下,您想知道是否这可能对通用编程有用。

而且......不幸的是,答案是:如果你不能证明至少一个良好的用例,它就不存在。

如果你真的相信这样一个泛型编程的用例存在,那么找一个,来告诉我们(但我理解这个问题可能会被认为是一个有趣的,超过作为个人,但是,您可能想考虑去其他网站。