Python中input和raw_input的区别

最近看到不同的python代码中,有使用input函数读取用户输入的,也有使用raw_input函数读取用户输入的,便很好奇两者之间的区别。

我们先看看官方文档中的描述:

raw_input(_[prompt]_)

If the _prompt_ argument is present, it is written to standard output without a trailing newline. The function then reads a line from input, converts it to a string (stripping a trailing newline), and returns that. When EOF is read, EOFError is raised. Example:

input([_prompt_])

Equivalent to eval(raw_input(prompt)).

This function does not catch user errors. If the input is not syntactically valid, a SyntaxError will be raised. Other exceptions may be raised if there is an error during evaluation.

我们可以看到,raw_input()返回一个字符串,而input()会先尝试将其作为一个Python表达式运行,再返回相应的结果。

也就是说,input()等价于eval(raw_input())。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# raw_input()
>>> val = raw_input()
1
>>> print type(val)
<type 'str'>
# input()
>>> val2 = input()
1
>>> print type(val2)
<type 'int'>
# eval(raw_input())
>>> val3 = eval(raw_input())
1
>>> print type(val3)
<type 'int'>

而由于通常来讲,大多数的输入通常是字符串。因此在Python3中,raw_input()被input()替代,input()本身便返回原始的输入字符串。

同样,若需要将其作为Python表达式运行,用eval(input())即可。