使用 eval 的通用函数有什么用吗?
Can a generic function using eval be of any use?
我知道,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)
.
我真的不确定。
如果你对简单的算术运算感兴趣,可以使用运算符
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
函数
我的想法是这样 thread。您一定已经读过它,但是...在您的情况下,您想知道是否存在它对泛型编程有用的情况。
并且......不幸的是,答案是:如果你不能证明至少 一个 好的用例,它就不存在。
如果您真的相信存在这样一个泛型编程的用例,那么找到一个,然后向我们展示(但我理解这个问题可能很有趣,作为一个 group,而不是作为一个 个人 ,但是,你可能要考虑去另一个网站)。
我知道,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)
.
我真的不确定。
如果你对简单的算术运算感兴趣,可以使用运算符
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
函数
我的想法是这样 thread。您一定已经读过它,但是...在您的情况下,您想知道是否存在它对泛型编程有用的情况。
并且......不幸的是,答案是:如果你不能证明至少 一个 好的用例,它就不存在。
如果您真的相信存在这样一个泛型编程的用例,那么找到一个,然后向我们展示(但我理解这个问题可能很有趣,作为一个 group,而不是作为一个 个人 ,但是,你可能要考虑去另一个网站)。