Python 3 中的 raw_input()
和 input()
有什么区别?
input
设置为 raw_input
并忽略名称错误。
不同之处在于 Python 3.x 中不存在 raw_input()
,而 input()
存在。实际上,旧的 raw_input()
已重命名为 input()
,旧的 input()
已不复存在,但可以使用 eval(input())
轻松模拟。 (请记住 eval()
是邪恶的。如果可能,请尝试使用更安全的方法来解析您的输入。)
在 Python 2 中,raw_input()
返回一个字符串,input()
尝试将输入作为 Python 表达式运行。
由于获取字符串几乎总是您想要的,Python 3 使用 input()
来实现。正如 Sven 所说,如果您想要旧的行为,eval(input())
有效。
raw_input()
。
蟒蛇2:
raw_input() 获取用户输入的内容并将其作为字符串传回。
input() 首先获取 raw_input() 然后对其执行 eval() 。
主要区别在于 input()
需要一个语法正确的 Python 语句,而 raw_input()
不需要。
蟒蛇 3:
raw_input() 被重命名为 input() 所以现在 input() 返回确切的字符串。
旧的 input() 已被删除。
如果您想使用旧的 input()
,这意味着您需要将用户输入评估为 python 语句,您必须使用 eval(input())
手动完成。
在 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 试图将harsha 作为一个变量而不是一个字符串来计算。为避免这种情况,我们可以在输入周围使用双引号,例如“harsha”:
>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha
原始输入()
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
函数评估用户输入。
我想在大家为python 2 用户提供的解释中补充一点细节。 raw_input()
,到目前为止,您知道它会评估用户作为字符串输入的任何数据。这意味着 python 甚至不会尝试再次理解输入的数据。它所考虑的只是输入的数据将是字符串,无论它是实际的字符串还是 int 或任何东西。
另一方面,input()
试图理解用户输入的数据。因此,像 helloworld
这样的输入甚至会将错误显示为“helloworld is undefined
”。
总之,对于python 2,要输入字符串也需要像'helloworld
'这样输入,这是python中使用字符串的常用结构。
如果您想确保您的代码使用 python2 和 python3 运行,请在脚本开头添加 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")
不定期副业成功案例分享
raw_input
……有什么区别?” - “不同之处在于没有raw_input
。” ...我会说,差别很大!eval
(和exec
),因为它们可能存在安全风险。有关详细信息,请参阅 SO 资深人士 Ned Batchelder 的Eval really is dangerous。当然,该建议也适用于旧的 Python 2input
。eval()
和exec()
都有有效的用例,但在决定使用eval()
之前,您首先需要了解为什么不应该使用它。