python中是否有内置的“偏差”功能?

时间:2019-06-05 12:13:45

标签: python

我不知道正确的术语,所以如果我所说的“偏差”一词不对,请更正我,但我想知道是否有内置函数来偏离值在Python中使用标准的数学运算符,该函数通过向其传递原始值,操作数和修改值来工作。

我需要在程序的顶层指定一个“偏差”,然后将其应用于动态检索的值。

我目前拥有的是这样的功能:

def deviateValue(value, deviation):
    value = float(value)
    operand = deviation[0]
    modifier = float(deviation[1:])
    if operand == "+":
        value += modifier
    elif operand == "-":
        value -= modifier
    elif operand == "*":
        value *= modifier
    elif operand == "/":
        value /= modifier
    elif operand == "=":
        value = modifier
    else:
        logger.warning("WARNING: Operand not implemented:", operand)
        return False

    return value

...可以,但是感觉像这样的基本东西应该已经在基本包中的某个地方实现了。

所以总结一下这个问题:基本的Python模块中是否已经存在类似这样的函数?至少,我在math模块中找不到它。

3 个答案:

答案 0 :(得分:2)

您也可以执行a + b来代替operator.add(a, b)。考虑到这一点,您现在只需创建一个从您的运算符字符串到相应的operator.*函数的映射,然后调用结果:

import operator

def deviate(first, operand, second):
    ops = {
        '+': operator.add,
        '-': operator.sub,
        '*': operator.mul,
        '/': operator.truediv,
        '//': operator.floordiv,
        '%': operator.mod,
    }

    return ops[operand](first, second)

# 2 + 3 = 5
deviate(2, '+', 3)
# 2 * 3 = 6
deviate(2, '*', 3)
# 10 % 3 = 1
deviate(10, '%', 3)

答案 1 :(得分:1)

为什么不简单地评估从这样的三个输入生成的字符串:

original=2
operand='+'
modifier=3
eval(str(original)+operand+str(modifier))

答案 2 :(得分:0)

我会推荐这样做,但这会完成任务:

def deviateValue(v,d):
    try:
        return eval(str(v)+d)
    except:
        logger.warning("WARNING: Could not evaluate %r %s" % (v,d))
        return False