簡體   English   中英

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

[英]Is there a built-in “deviation”-function in 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模塊中找不到它。

除了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)

為什么不簡單地評估從以下三個輸入生成的字符串:

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

建議這樣做,但是可以做到:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM