在Python 2中创建input()的基本原理是什么?
在Python2中,有两种获取输入的方法在Python 2中创建input()的基本原理是什么?,python,input,eval,python-2.x,python-internals,Python,Input,Eval,Python 2.x,Python Internals,在Python2中,有两种获取输入的方法raw\u input()和input(),这是eval(raw\u input())的包装。然而,在Python3中,input()取代了raw\u input(),并且input()的旧方法被弃用。这记录在: PEP 3111:raw\u input()已重命名为input()。也就是说,新的input()函数从sys.stdin中读取一行,并返回它,同时去掉尾随的换行符。如果输入过早终止,则会引发eoferor。要获取input()的旧行为,请使用e
raw\u input()
和input()
,这是eval(raw\u input())
的包装。然而,在Python3中,input()
取代了raw\u input()
,并且input()
的旧方法被弃用。这记录在:
PEP 3111:raw\u input()
已重命名为input()
。也就是说,新的input()
函数从sys.stdin
中读取一行,并返回它,同时去掉尾随的换行符。如果输入过早终止,则会引发eoferor
。要获取input()
的旧行为,请使用eval(input())
但是为什么最初在Python2中出现了input()
?将用户输入评估为文字Python 2代码的基本原理是什么?这就是文件中所说的:
[input()
相当于eval(原始输入(提示))
此函数不捕获用户错误。如果输入在语法上无效,将引发SyntaxError
。如果评估过程中出现错误,可能会引发其他异常
如果加载了readline
模块,则input()
将使用它提供详细的行编辑和历史记录功能
考虑使用raw\u input()
函数进行用户的常规输入
注意粗体部分(我强调了这一点)。这到底意味着什么?发现了一些东西。然而,我发现唯一真正相关的一点是:
使用此模块进行的设置会影响解释器的交互提示以及raw\u input()
和input()
内置函数提供的提示的行为
这并不能真正解释为什么最初创建或需要input()
不用说,使用eval(any_user_input())
在安全方面是非常危险的,可能会导致调试困难,而且据我所知,速度很慢。那么,为什么他们首先要在Python 2中创建input()
?在input()
崩溃时,开发人员是否不知道
参考文献:
- 就其价值而言,
input
内置在第一个可用的Python版本(0.9.1)中,它是从1991年开始的。我可以想象Python2.x是为了向后兼容Python1.x,Python1.x是为了向后兼容0.x
对0.x->1.x和1.x->2.x移植问题说不 首先,可能唯一能果断回答这个问题的人是
input
在程序员使用的程序中很有用,这样他们就可以输入复杂的结构,比如{'foo':42}
,甚至表达式,但在非熟练用户使用的程序中就不那么有用了
从SCM历史中我们可以看到,input
和raw\u input
,当Python处于婴儿期时,那时exec
是一个函数,int('42')
会引发异常。最值得注意的是,eval
也已经存在,因此即使在当时,人们也可以使用eval(raw_input())
来获得大致相同的效果
当时还没有,而且“唯一一个明显的方式”并不是一个指导原则,所以这可能是一个疏忽
而原始输入
和输入
都保留了下来。在Python的历史上,向后兼容是一个指导原则,因此input
在向后不兼容的Python 3发布之前一直保持不变
关于
readline
模块的粗体部分:如果导入readline
,则可以使用箭头键在input()
行上移动光标键,并可配置绑定;如果程序中未导入readline
,则不存在此类行为
同样,这也不是当初存在
input
的原因;早在1990年,Python根本不支持这种编辑,不管是使用input
还是raw\u input
。IMHO,主要动机是支持直接输入Python风格的数据(数字、列表、命令)。这里可以消除任何关于设计决策的困惑:-)它很方便,时间还早,人们当时对安全问题没有太多的思考。同样的原因C有get
。那么为什么它出现在0.9.1中呢?这并没有真正澄清任何事情。问题是为什么它出现在Python 2中,我正在回答。问题很明显是“为什么最初创建或需要input()
”。有时候,技术上正确并不是最好的正确。你真的认为这个答案会让任何人满意吗?老实说?我得到的印象是,这个问题是关于一个显然无用的函数,你把它作为一个笑话发布,人们知道这些东西是无用的,但还是发布了……好吧,对于“为什么首先创建input()”一个明显的答案是,有人想评估用户输入。这在脚本语言开发的早期阶段是很自然的,可能是穷人的REPL。人们总是做出错误的决定;所有东西的早期版本都包含很多无用和不正确的东西。问题的有趣之处在于它为什么能存活这么多年。所以对我来说,“为什么在Python 2中使用它”比“为什么首先创建它”更有趣。