这两个均是 python 的内建函数,通过读取控制台的输入与用户实现交互。但他们的功能不尽相同。举两个小例子。
1.输入为纯数字时
input返回的是数值类型,如int,float
raw_inpout返回的是字符串类型,string类型
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = input('input:')
print 'type of input', type(a)
b = raw_input('raw_input:')
print 'type of raw_input', type(b)
输出:
input:1
type of input <type 'int'>
raw_input:1
type of raw_input <type 'str'>
2.输入为计算公式时
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = input('input:')
print a
b = raw_input('raw_input:')
print b
输出:
input:1+2
3
raw_input:1+2
1+
3.输入为字符串时
#!/usr/bin/python
# -*- coding: UTF-8 -*-
b = raw_input('raw_input:')
print b
a = input('input:')
print a
输入a:
raw_input:a
a
input:a
Traceback (most recent call last):
File "D:/python_learning/test/cookbook/input raw_input.py", line 5, in <module>
a = input('input:')
File "<string>", line 1, in <module>
NameError: name 'a' is not defined
输入'a':
raw_input:'a'
'a'
input:'a'
a
从对比可以看出,raw_input()直接从控制台读取输入(它可以接受任何类型的输入)。至于 input() ,它希望能够读取一个合法的 python 表达式,也就是说,当你输入一个字符串时,你必须用引号将它括起来,否则它会引发 SyntaxError 。
raw_input() 将所有输入都视为一个字符串,并返回一个字符串类型。而input()在处理纯数字输入时有自己的特点,它返回输入数字的类型(int,float),input()可以接受合法的python表达式,例如:input(1+3)会返回4类型为 int。
查看实现方式:
def input(prompt=None): # real signature unknown; restored from __doc__
"""
input([prompt]) -> value
Equivalent to eval(raw_input(prompt)).
"""
pass
input()本质上是使用raw_input()实现的,调用raw_input()后调用eval()函数即可,所以你甚至可以将表达式作为input()的参数,它会计算表达式值并返回。
不过在 Built-in Functions 里有一句话是这样写的:Consider using the raw_input() function for general input from users.
eval() 函数将字符串 str 评估为有效表达式并返回计算结果。存在一定的风险。如果用户输入__import__('os').system('dir'),你会发现当前目录下的文件会显示在用户面前,然后继续输入open('文件名') .read(),代码就会被人看到。获取完成后,发出删除命令,文件消失。哭!因此,除非对input()有特殊需求,否则我们一般推荐使用raw_input()与用户进行交互。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 在python中编写vim插件的两种方法11/16
- ♥ 如何比较python时间09/09
- ♥ Python字符串大小写转换函数及用法12/22
- ♥ 如何用python生成xml12/14
- ♥ 如何将元素添加到python列表11/06
- ♥ Python 中的内置类型功能是什么?12/23
内容反馈