2013-09-26 186 views
5

好了命令,所以我用了很多輸入的命令,我理解在Python2我可以這樣做:在Python 2.x和3.x

text = raw_input ('Text here') 

但現在,我使用Python 3我想知道有什麼區別:

text = input('Text here') 

和:

text = eval(input('Text here')) 

當我必須使用一個或其他?

+0

如果你不習慣使用'eval',長話短說它評估你傳遞給它的字符串,就像它是代碼一樣。 – whatyouhide

+1

如果你從不使用'eval()',那很可能。如果你確實使用'eval()',那麼不要在unsanitized用戶輸入中使用它。考慮如果用戶鍵入'os.system(「rm -rf /」)'會發生什麼情況。 –

回答

7

在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中的相同:

text = input('Text here') 

這是一個快速總結從Python文檔:

PEP 3111:raw_input()更名爲input()。也就是說,新的input() 函數從sys.stdin中讀取一行,並將其與去除的 換行符一起返回。如果輸入提前終止 ,它會提高EOFError。要獲得input()的舊行爲,請使用eval(input())

+0

謝謝,但我不知道Python 2.x中raw_input和input之間的區別。你能告訴我嗎? – PazEr80

+0

'raw_input'只是讀取用戶輸入的內容並將其作爲字符串返回。另一方面,'輸入'評估用戶輸入的是真實的Python代碼(注意這是2.x)。 – iCodez

2

這些相當於:

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 

注意,在Python 3還沒有一個叫raw_input()功能,如Python的3 input()只是raw_input()重命名。在Python 3中,並沒有Python 2的input()的直接等價物,但它可以很容易地模擬如下:eval(input('Text here'))

現在,在Python 3 input('Text here')eval(input('Text here'))之間的區別在於,前者返回輸入的字符串表示輸入(和其後的換行符移除),而後者不安全evaluates輸入,就好像它是一個表達式直接輸入在交互式翻譯中。