簡體   English   中英

不使用 eval() 評估字符串

[英]Evaluating strings without eval()

在 Python 中,我可以在不使用可怕的 eval() 的情況下評估字符串(例如“math.sin(3)+max(5,3)”),並且最好使用十進制精度嗎? 注意:不是簡單的數學表達式如“3*2”,很容易。 x = math.sin(3)+max(5,3) 也會給出答案,但 x = "math.sin(3)+max(5,3)" 只會給你一串字符,然后浮點數("math.sin(3)+max(5,3)") 將給出 ValueError,無法將字符串轉換為浮點數:

因為 math.sin(3) 和 math.sin(3) 都分別給你浮點數和整數,所以你不需要使用 eval 來計算它們。 此外,您可以指定用戶定義的 function 來評估表達式

在這里,我演示了這樣的 function 用於評估具有初級數學運算的表達式,用於較小的表達式,如"a + b"

def evaluate(expression):
    expression = expression.replace(" ", "")
    expression = [j for j in expression]
    num1 = float(expression[0])
    i = expression[1]
    num2 = float(expression[2])
    if i == "+":
        return num1+num2
    elif i == "-":
        return num1-num2
    elif i == "*":
        return num1*num2
    elif i == "/":
        return num1/num2
    else:
        return "Error in Expression Format"


print(evaluate("5 + 4"))

要評估更復雜的表達式, python ast package 可能就是您要查找的內容。 但是您仍然必須解析對“數學”package 的調用(或您希望在表達式中使用的任何其他函數)。 這篇文章提供了一個有趣的答案

暫無
暫無

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

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