我正在告知自己与用户交互的功能。我有基础知识:raw_input()
e input()
。我读过input()
它只接受整数数据,它不接受字符串,为此我们使用raw_input()
.
问题是,如果我将字符串存储在变量中,input()
如果它接受并识别它。但是,如果我尝试对其执行相同操作,raw_input()
则会出现以下错误:
Traceback (most recent call last): File "lllll.py", line 9, in <module> raw_input() NameError: name 'raw_input' is not defined
我使用 Python 3.5.2
正如您被告知的那样,错误发生了,因为
raw_input
它不存在于Python 3.X
. 这已经并将继续成为混乱的根源,因为尽管具有相同的名称,但这些函数input()
并没有做同样Python 2
的事情。Python 3
在
Python 2.x
这两个函数中,我们将澄清一下每个函数的作用:Python 2.x:
raw_input()
按原样返回一行用户输入,原始并始终返回一个字符串,一个包含输入的对象str
(ASCII)。但请记住,该变量
v
不包含数字,它不是 aint
,而是一串字符(文本)。如果我们尝试作为整数操作:我们得到一个错误,告诉我们不能添加一个带有整数的字符串:
要使其成为整数,您必须通过显式转换来转换它(Python 具有强类型,它从不进行隐式转换以使变量的类型适应上下文):
input()
期望将有效的 Python 表达式传递给它。也就是说,只能将Python代码传递给它,并且该函数会对其进行评估和处理。这里发生了什么?好吧,它
input()
接受了表达式,并且因为它是有效的 Python 代码,所以它已经评估了它并执行了操作。我们可以认为input()
它只接受数字,但这是错误的,我不知道为什么它变得如此普遍,以至于概括了它input
用于输入标量和raw_input
字符串的想法。接受 Python 中的任何有效表达式:连接两个字符串:
使用列表压缩创建列表:
我们可以毫无问题地传递一个字符串,但是使用引号将一个字符串传递给它,就像我们在代码中声明一个字符串文字一样:
另一个很常见的错误是尝试
input
在 Python 2 中使用,就像在 Python 3 中使用一样,想法是把用户输入的字符串赋给一个变量:我们有一个错误:
就像我们尝试使用之前未定义的变量一样:
如果我们已经了解它
input
在 Python 2 中的作用,我们应该不会感到惊讶,当评估输入的字符串 'Jogofus' 时,它会尝试Jogofus
在全局命名空间中查找名称(就好像它是一个变量的名称,一个函数,一类等)。Python 3.x:
input()
raw_input()
与中相同Python 2.x
。从标准输入中读取一行输入并以对象str
(UTF-8) 的形式将其原始返回。事实上,它是相同的函数,但重命名了,唯一的区别是在 Python 2 中str
它是 ASCII,而在 Python 3 中它是一个 Unicode (UTF-8) 字符串。前者
input()
大致相当于eval()
,它接受一个文本字符串并尝试评估它,就好像它是有效的 Python 代码一样。不同之处在于,您不必像input
在 Python 2 中那样从标准输入中读取字符串,而是必须将其作为参数传递:简而言之,如果你使用
Python 3.x
only existsinput()
并且总是返回一个字符串。如果你 use做与inPython 2.x
raw_input
相同的事情(接受任何字符串并总是返回一个 object ),同时只接受在 Python 中语法上有效的表达式(否则它会抛出错误)并在之后评估它们。input()
Python 3.x
str
input()
我建议您在查看文档或教程时查看他们使用的版本,因为从分支 2 到 3 的更改很重要。以下是最重要的列表:
https://docs.python.org/3/whatsnew/3.0.html
该函数在Python 3.x
raw_input()
中被重命名为input()
旧的
input()
可以模仿eval(input())
对于python2有 2 个函数
input()
和raw_input()
,第一个用于数值,第二个用于文本字符串;但这在python3中发生了变化,raw_input()
已重命名为 input(),并且旧的input()
已被删除。所以如果你使用 python 3 你应该使用input()
而不是raw_input()