使用eval设计计算器的优点和缺点

时间:2013-01-25 04:42:55

标签: eval calculator kivy

我正在使用kivy为Android制作一个计算器,它几乎完成了(不能使用java因为python是我所知道的唯一语言)。它的工作方式是,用户输入表达式,eval用于评估表达式。目前,在我的应用程序中,eval表达式可以包含数字,数学运算符(+, - ,/,*)和数学模块中的大多数运算符(简而言之,它是一个科学计算器),它可以按预期工作。将来我计划集成matplotlib来为应用程序添加图形功能。因此,在上下文中,eval是一个安全的选择。鉴于我在编程方面的经验有限,我没想到eval在很多情况下都是一种不安全的方法,就在几天前我偶然发现了一个讨论与使用eval相关的安全问题的线程。

因此,最好将eval更改为我的应用程序中的其他内容,或者在给定的情况下是否安全?如果是前者,那么在不改变我的代码的情况下,最好的选择是什么。如果它在python标准库中会更好,所以我不会增加应用程序大小)

编辑:顺便说一句,eval表达式是实时计算的(不确定这是否重要)。

1 个答案:

答案 0 :(得分:1)

This article应该对你有用 - 这几乎就是你想要做的事情。

另一方面,

This one是一个很好的警告,如果你不小心会发生什么。据推测,有很好的解决方法(可能只是过滤掉任何包含双下划线的输入,作为一个非常简单的开始),但值得记住的是Python有很多魔法,并且大多数魔法都可以通过{{1}访问}。