Python中内建函数input()与raw_input()函数的区别

1 简介

内建函数input()与内建函数raw_input()均是在__builtin__模块中定义的两个函数,两者均可用来从控制台获取用户输入信息以便操作。python 中使用help()函数分别对两者进行解读后发现:

(1)input()函数返回值是数字类型的数据。raw_input()函数返回值是字符串类型的数据,即用户输入的数据类型,均会以字符串的形式返回,当用户输入EOF(Unix:Ctrl-D,Windows:Ctrl-Z+Return)时,将会导致EOF错误。为方便理解,举两个简单的例子。

>>> user_name=raw_input("Please enter your name:")
Please enter your name:zhang san
>>> user_name
'zhang san'
>>> 
使用raw_input()获取用户输入时,比较符合常人思维,在输入时不需要对输入信息做任处理。但是使用input()函数执行上述操作时,会出现错误:
>>> user_name=input("Please enter your name:")
Please enter your name:zhang san


Traceback (most recent call last):
  File "", line 1, in 
    user_name=input("Please enter your name:")
  File "", line 1
    zhang san
            ^
SyntaxError: unexpected EOF while parsing
如果想实现raw_input()函数输入字符串的功能,则使用input()时需要做以下修改:

>>> user_name=input("Please enter your name:")
Please enter your name:"zhang san"
>>> user_name
'zhang san'
(2)使用input()函数进行表达式输入时可以直接得到表达式的结果,但是会提示EOF Error,而使用raw_input()可以进行表达式输入且不会提示错误。例如:

add=input(10+20)
30

Traceback (most recent call last):
  File "", line 1, in 
    add=input(10+20)
  File "", line 0
    
   ^
SyntaxError: unexpected EOF while parsing

>>> add=raw_input(10+20)
30
(3)在进行数字值输入时,使用raw_input()函数获取到的值会自动以字符串的形式输出,input()函数获取的值则仍然是原来的数值,不需要做转换处理。例如:

>>> number1=raw_input("please input a number:")
please input a number:10
>>> number1
'10'
>>> number1=input("please input a number:")
please input a number:10
>>> number1
10

>>> number2=raw_input("please input a float number:")
please input a float number:3.14
>>> number2
'3.14'
>>> number2=input("please input a float number:")
please input a float number:3.14
>>> number2
3.14

2.由此可以得出,在需要进行数字值的操作时,使用input()函数较便捷,不需要额外的数据类型转换,使用raw_input()函数进行数值输入操作时,在得到输入数据后需要进行数据类型的转换,才可继续使用,否则会出现数据类型不匹配的错误;再需要获取字符串输入信息时,使用raw_input()函数则更加便捷。

3.input()函数的实际源代码如下:

def input(prompt): 
return eval(raw_input(prompt)) 
可见input()函数内部调用了raw_input()函数,而raw_input()函数的返回值又作为eval()函数的参数,那么eval()函数有何作用呢?
>>> help(eval)
Help on built-in function eval in module __builtin__:

eval(...)
    eval(source[, globals[, locals]]) -> value
    
    Evaluate the source in the context of globals and locals.
    The source may be a string representing a Python expression
    or a code object as returned by compile().
    The globals must be a dictionary and locals can be any mapping,
    defaulting to the current globals and locals.
    If only globals is given, locals defaults to it.
由此可知,input()函数在数值输入时之所以可以得到数据类型相同的数据,而不是字符串类型的数据,其实际是eval()函数做了字符串到数值(整型、浮点型等)的转换而已。


你可能感兴趣的:(Python基本知识学习,python,内置函数,raw_input)