`input`和`raw_input`的区别
在一个教程中,我看到提到 input
和 raw_input
之间是有区别的。我发现他们在 Python 3.0 中改变了这两个函数的行为。那么新的行为是什么呢?
还有为什么在 Python 控制台中,这段代码
x = input()
会报错,但如果我把它放在一个 file.py 文件里运行,就不会了呢?
3 个回答
这很简单:
raw_input()
返回的是字符串值- 而
input()
返回的是整数值
举个例子:
1.
x = raw_input("Enter some value = ")
print x
输出:
Enter some value = 123
'123'
2.
y = input("Enter some value = ")
print y
输出:
Enter some value = 123
123
所以如果我们计算 x + x =
,结果会是 123123
而如果我们计算 y + y =
,结果会是 246
input() 和 raw_input() 的区别
raw_input 是用来收集用户输入的字符,并把这些字符当作字符串来处理。也就是说,你输入的内容会被直接当作文本来使用。
而 input() 可就不一样了,它不仅仅是处理数字,还会把任何输入都当作 Python 代码来执行。如果有懂行但心怀不轨的人输入一条 Python 命令,甚至可能会删除文件。所以,建议你使用 raw_input(),然后再用 Python 自带的转换函数把字符串转换成你需要的数据类型。
另外,input() 也不太安全,因为它期待你输入一个有效的 Python 表达式。如果你输入的内容在语法上不正确,就会出现语法错误(SyntaxError)。
在 Python 2.x 中,raw_input()
会返回一个字符串,而 input()
则会根据你调用它时的环境来计算输入的内容。
>>> x = input()
"hello"
>>> y = input()
x + " world"
>>> y
'hello world'
在 Python 3.x 中,input
被重新定义,之前叫做 raw_input
的功能现在变成了 input
。所以如果你想要以前的功能,就得手动调用 compile
然后再用 eval
。
python2.x python3.x
raw_input() --------------> input()
input() -------------------> eval(input())
在 3.x 中,上面的操作流程是这样的:
>>> x = eval(input())
'hello'
>>> y = eval(input())
x + ' world'
>>> y
'hello world'
>>>
所以你可能在解释器中遇到了错误,因为你没有在输入的内容周围加上引号。这是必要的,因为输入的内容会被计算。你是不是遇到了名称错误?