我想创建一个python函数,一旦提供两个int
值将返回一个比较字符串。使用if
块或for
和while
循环的方法很明显。我很想知道最好的解决方案。
def get_comparison_operator(a, b):
if a == b:
op = '=='
elif a > b:
op = '>'
# ... etc
return op
一个简单的if-else
块会遇到区分==
和<=
或>=
的问题,所以我可能会选择for
循环一个break
。但是,正如我之前所说,我很想学习这种方法的有效方法,如果有的话。
答案 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%的情况并且它们是互斥的。也许对于一些奇怪的操作员来说,这种方法更有意义。