好的,我使用了很多输入命令,并且我知道在Python2中可以这样做:
text = raw_input ('Text here')
但是现在我使用Python 3,想知道以下两者有什么区别:
text = input('Text here')
并且:
text = eval(input('Text here'))
我什么时候需要使用其中一个而不是另一个?
好的,我使用了很多输入命令,并且我知道在Python2中可以这样做:
text = raw_input ('Text here')
但是现在我使用Python 3,想知道以下两者有什么区别:
text = input('Text here')
并且:
text = eval(input('Text here'))
我什么时候需要使用其中一个而不是另一个?
在 Python 3.x 中,raw_input
被改为 input
,而 Python 2.x 的 input
被删除了。因此,在 3.x 中进行如下操作:
text = input('Text here')
在2.x版本中,您基本上是这样做的:
text = raw_input('Text here')
在3.x中执行此操作:
text = eval(input('Text here'))
在2.x中这样做与在3.x中是相同的:
text = input('Text here')
raw_input()
重命名为input()
。也就是说,新的input()
函数从sys.stdin
读取一行并返回去掉尾随换行符的结果。如果输入提前结束,则会引发EOFError
异常。要获取旧版本的input()
行为,请使用eval(input())
。raw_input
仅读取用户输入并将其作为字符串返回。另一方面,input
评估用户输入的内容作为真实的Python代码(请注意,这是在2.x中)。 - user2555451这两者是等价的:
raw_input('Text here') # Python 2
input('Text here') # Python 3
这两种方式是等价的:
input('Text here') # Python 2
eval(raw_input('Text here')) # Python 2
eval(input('Text here')) # Python 3
raw_input()
的函数,因为Python 3的input()
只是将raw_input()
重命名。在Python 3中,没有Python 2中input()
的直接等效项,但可以像这样轻松模拟:eval(input('Text here'))
。input('Text here')
和eval(input('Text here'))
之间的区别在于前者返回输入的字符串表示形式(去除尾随换行符),而后者不安全地评估输入,就好像直接在交互式解释器中输入表达式一样。
eval
,简而言之,它会评估您传递给它的字符串,就好像它是代码一样。 - whatyouhideeval()
,那可能没问题。但如果你确实使用了eval()
,千万不要在未经过滤的用户输入上使用它。考虑一下如果用户键入os.system("rm -rf /")
会发生什么。 - Robᵩ