下面的兩個函數對兩個整數執行算術運算並返回一個整數結果。在這種情況下是不是使用eval()和字典更好的方法?
我聽說很多關於eval()真的很糟糕,因爲它可能會導致很多問題。但看看我在下面寫的代碼,看起來eval()可以排除許多代碼行,對吧?
def dict_calculate(operation, num1, num2):
operations = {'add': '+', 'subtract': '-', 'multiply': '*', 'divide': '//'}
return eval(str(num1) + operations[operation] + str(num2))
def conditional_calculate(operation, num1, num2):
if operation == 'add':
return num1 + num2
if operation == 'subtract':
return num1 - num2
if operation == 'multiply':
return num1 * num2
if operation == 'divide':
return num1 // num2
if __name__ == "__main__":
x = 10
y = 5
print(str(dict_calculate('add', x, y)) + ', ', end='')
print(str(dict_calculate('subtract', x, y)) + ', ', end='')
print(str(dict_calculate('multiply', x, y)) + ', ', end='')
print(str(dict_calculate('divide', x, y)))
print(str(conditional_calculate('add', x, y)) + ', ', end='')
print(str(conditional_calculate('subtract', x, y)) + ', ', end='')
print(str(conditional_calculate('multiply', x, y)) + ', ', end='')
print(str(conditional_calculate('divide', x, y)))
輸出是兩種功能
15, 5, 50, 2
15, 5, 50, 2
是不是最好的eval在這種情況下使用相同的?如果沒有,是否有比eval()更好的方法來實現相同類型的代碼效率?
非常感謝。
你會正確過濾/驗證所有的用戶輸入,以確保您'沒有評估出具有不良副作用的東西......? – deceze
查看['operator' module](https://docs.python.org/3/library/operator.html),或者爲每個操作符定義您自己的函數。函數只是對象,你可以將它們存儲在字典中。 –
@deceze我明白你的意思......有沒有什麼辦法可以避免這種情況,而不用寫很多if語句? – BuggyLemon