如何根据提供的两个值返回比较运算符?

时间:2016-09-06 13:22:36

标签: python

我想创建一个python函数,一旦提供两个int值将返回一个比较字符串。使用if块或forwhile循环的方法很明显。我很想知道最好的解决方案。

def get_comparison_operator(a, b):
    if a == b:
        op = '=='
    elif a > b:
        op = '>'
    # ... etc
    return op

一个简单的if-else块会遇到区分==<=>=的问题,所以我可能会选择for循环一个break。但是,正如我之前所说,我很想学习这种方法的有效方法,如果有的话。

1 个答案:

答案 0 :(得分:4)

您可以使用operator模块来减少行数,但在一天结束时,您需要保留要检查的操作列表。

import operator

operators = [operator.eq, operator.lt, operator.gt, operator.ne]
labels = ["==", "<", ">", "!="]

def get_comparison_operator(a, b):
    for op, label in zip(operators, labels):
        if op(a, b):
            return label
    return None

显然,检查顺序在这里是至关重要的,如果在更大之前检查更大的相等,则第二个不会有更改被返回。

带有元组列表的替代形式,我必须说类似于表格的形式看起来非常好。

import operator

operators = [
    (operator.eq, "=="), 
    (operator.lt, "<"),
    (operator.gt, ">"),
    (operator.ne, "!=")
]

def get_comparison_operator(a, b):
    for op, label in operators:
        if op(a, b):
            return label
    return None

显然,eq / lt / gt是相当微不足道的,因为3种可能性涵盖100%的情况并且它们是互斥的。也许对于一些奇怪的操作员来说,这种方法更有意义。