请注意:这不是关于 eval() 的使用,而是关于使用和教授它的书的潜在质量(或缺乏质量)。所以在 Python 中已经有无数关于 eval() 的线程。
冒着招致 SO 的愤怒和反对票的风险,我还是决定问这个问题,以防万一。请多多包涵。对于这个特定的问题,我已经尝试过 Google 和 SO 本身(如您所见),但一无所获。不过,我可能是个盲人。
这个问题是关于臭名昭著的 eval() 函数的使用。
约翰·泽勒(John Zelle)有一本相对知名(如您所见)的书:http: //www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ref=pd_sim_b_3
从技术上讲,它是一本使用 Python 作为编程语言的 CS1 书籍。很公平,这让作者承担了一些责任(“嘿,我想在这里教你一些宽泛的东西,而不是所有这些语法和安全细节”),但是当我开始阅读它时,我注意到,字面上第一个例子,使用
x = eval(input("Enter your number: "))
其中 x 应该是一个 int,因此我们需要将用户输入转换为一个 int。
我使用的是 Python 2.7.4,这本书是关于 Python 3 的,所以我从一开始就遇到了 print() 和 input() 和 eval() 的很多问题,不得不做一些研究来获得工作的例子。在我的研究过程中,我已经阅读了无数关于 Python 中 eval() 的意见(主要是在 SO 上),归结为它几乎总是很糟糕、存在安全风险、不必要的技术开销等等。用户的问题要复杂得多(有一个关于在做 wxPython 项目时使用 eval() 的问题),所以我不能保证我的案例和他们的案例完全相似,但仍然......
所以,我承认,我对这本书的了解并不多,但我已经达到了这样的程度,即稍后作者解释了 eval() 的使用,而没有提及其有争议的性质。他基本上说了我刚才所说的:我们需要 x 最终成为一个 int,所以这里有一个方便的方法来做到这一点。而且他似乎永远都在使用它。
我的问题是:如果作者从一开始就犯了这样的错误(或者这不是一个错误?我可能在这里遗漏了一些东西),这本书值得学习吗?我相信 Zelle 先生是一位伟大的 CS 老师,这表明了,但不管他是否愿意,除了算法和编程艺术之外,人们仍然会从他的书中学习 Python。那么,是否值得从一本对 Python 社区中看似普遍的问题保持沉默的书中学习 Python?我不希望 Zelle 先生成为一名 Python 黑客并揭开它所有的秘密,但是像这样的小细节可以成就或毁掉一个自学/自学的人。您对本学习材料有何建议?
PS另一方面,让我从一开始就做很多研究和实验(不知不觉地)非常酷:-)
谢谢!