raw_input()
和input()
有什么区别?#1 楼
区别在于raw_input()
在Python 3.x中不存在,而input()
则存在。实际上,旧的raw_input()
已重命名为input()
,而旧的input()
已经消失,但可以使用eval(input())
轻松进行模拟。 (请记住,eval()
是邪恶的。如果可能,请尝试使用更安全的方法来解析输入。)评论
“ raw_input和...之间有什么区别?” -“不同之处在于没有raw_input。” ...我要说是很大的不同!
– ivan_pozdeev
2015年2月10日在21:03
我猜想在Python 2中,程序员假设程序员实际上想“执行”用户输入的命令,因为最初(我想)从用户那里请求输入可能仅是为此目的。但是,当他们意识到程序员可能还希望获取“原始”输入时,他们设计了另一个函数“ raw_input”。在Python 3中,他们注意到那是什么愚蠢,并只是删除了原始输入默认值的执行,只产生了一个简单的函数。
– J. C. Rocamonde
2015年4月3日13:56
运行Py3.5.1的Repl.it将raw_input()作为关键字。
–OldBunny2800
16年8月15日在2:20
应该说,通常应该避免评估(和执行),因为它们可能会带来安全风险。有关详细信息,请参阅SO老将Ned Batchelder认为Eval确实很危险。当然,该建议也适用于旧的Python 2输入。
– PM 2环
17年11月5日在10:53
@ PM2Ring我在警告中添加了警告。当然,eval()和exec()都有有效的用例,但是在决定使用eval()之前,您首先需要了解为什么不应该使用它。
– Sven Marnach
17年11月5日,12:33
#2 楼
在Python 2中,raw_input()
返回一个字符串,而input()
尝试将输入作为Python表达式运行。由于几乎总是想要一个字符串,因此Python 3使用
input()
做到了。正如Sven所说,如果您想要旧的行为,eval(input())
可以使用。评论
您应该添加Python 3没有raw_input()。
–马丁·托马
13年5月5日在9:28
将输入作为python表达式运行有什么用?
–阿克斯海(Akshay Vijay Jain)
17年8月11日在5:52
@AkshayVijayJain,可能是用于输入数字的。但这是完全不安全的。
– MarSoft
17-10-20在0:19
#3 楼
Python 2:raw_input()
完全接受用户键入的内容,并将其作为字符串传递回。 input()
首先获取raw_input()
,然后再对其执行一次eval()
。 主要区别在于
input()
期望语法正确的python语句,而raw_input()
则不希望。Python 3:
raw_input()
重命名为input()
,所以现在input()
返回了确切的字符串。旧的
input()
被删除了。 如果要使用旧的
input()
,这意味着您需要将用户输入评估为python语句,则必须使用eval(input())
手动进行操作。#4 楼
在Python 3中,不存在Sven已经提到的raw_input()
。在Python 2中,
input()
函数对您的输入进行求值。示例:
name = input("what is your name ?")
what is your name ?harsha
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
name = input("what is your name ?")
File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined
在上面的示例中,Python 2.x试图将hasha评估为变量而不是字符串。为了避免这种情况,我们可以在输入周围使用双引号,例如“ harsha”:
>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha
raw_input()
raw_input()`函数不求值,它只会读取您输入的内容。
示例:
name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'
示例:
name = eval(raw_input("what is your name?"))
what is your name?harsha
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
name = eval(raw_input("what is your name?"))
File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined
在上面的示例中,我只是尝试使用
eval
函数评估用户输入。#5 楼
我想在每个人为python 2用户提供的解释中添加更多细节。raw_input()
,到目前为止,您已经知道该函数可以评估用户以字符串形式输入的数据。这意味着python甚至不会尝试再次理解输入的数据。它只会考虑输入的数据将是字符串,无论它是实际的字符串还是int或其他任何值。 另一方面,
input()
试图理解用户输入的数据。因此,像helloworld
这样的输入甚至会将错误显示为'helloworld is undefined
'。 总之,对于python 2,也要输入字符串,您也需要像“
helloworld
”一样输入它,这是python中使用字符串的常用结构。 #6 楼
如果您想确保自己的代码与python2和python3一起运行,请在脚本中使用function input()并将其添加到脚本的开头:from sys import version_info
if version_info.major == 3:
pass
elif version_info.major == 2:
try:
input = raw_input
except NameError:
pass
else:
print ("Unknown python version - input function not safe")
评论
您如何制作一个既可以兼容Python 2也可以兼容Python 3的输入的程序?为此,您尝试将输入设置为raw_input并忽略名称错误。
在``six''库中查找python 2和3的兼容性。