假设我有一个字符串 op 可以等于 <、>、==、<= 或 >=。
我想对两个值进行关联运算。有没有比下面显示的简单 if/else 方法更 pythonic 的方法来做到这一点?
def doit(op, val1, val2):
if op == ">":
return val1 > val2
elif op == "<":
return val1 < val2
etc....
请您参考如下方法:
您可以使用运算符:
import operator
operations = {'>':'gt', '>=':'ge', '<':'lt', '==':'eq', '!=':'ne', '<=':'le'}
def doit(op, *vals):
return getattr(operator, operations[op])(*vals)
使用getattr 等同于调用operator.eq、operator.lt 等,除了函数的字符串名称被调用传递给 getattr。
编辑:一个更短的解决方案需要从 operator 导入特定函数:
from operator import gt, ge, lt, eq, ne, le
operations = {'>':gt, '>=':ge, '<':lt, '==':eq, '!=':ne, '<=':le}
def doit(op, *vals):
return operations[op](*vals)
