Pythonic方法执行<,>,==,<=或> =基于字符串值的操作?

mmn*_*yle 1 python

假设我有一个字符串op,可以等于<,>,==,<=或> =.

我想对两个值执行相关的操作.除了下面显示的简单if/else方法之外,还有更多的pythonic方法吗?

def doit(op, val1, val2):
     if op == ">":
         return val1 > val2
     elif op == "<":
         return val1 < val2
     etc....
Run Code Online (Sandbox Code Playgroud)

Aja*_*234 8

你可以使用operator:

import operator
operations = {'>':'gt', '>=':'ge', '<':'lt', '==':'eq', '!=':'ne', '<=':'le'}
def doit(op, *vals):
  return getattr(operator, operations[op])(*vals)
Run Code Online (Sandbox Code Playgroud)

使用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)
Run Code Online (Sandbox Code Playgroud)