好了命令,所以我用了很多輸入的命令,我理解在Python2我可以這樣做:在Python 2.x和3.x
text = raw_input ('Text here')
但現在,我使用Python 3我想知道有什麼區別:
text = input('Text here')
和:
text = eval(input('Text here'))
當我必須使用一個或其他?
好了命令,所以我用了很多輸入的命令,我理解在Python2我可以這樣做:在Python 2.x和3.x
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中的相同:
text = input('Text here')
這是一個快速總結從Python文檔:
PEP 3111:
raw_input()
更名爲input()
。也就是說,新的input()
函數從sys.stdin
中讀取一行,並將其與去除的 換行符一起返回。如果輸入提前終止 ,它會提高EOFError
。要獲得input()
的舊行爲,請使用eval(input())
。
這些相當於:
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輸入,就好像它是一個表達式直接輸入在交互式翻譯中。
如果你不習慣使用'eval',長話短說它評估你傳遞給它的字符串,就像它是代碼一樣。 – whatyouhide
如果你從不使用'eval()',那很可能。如果你確實使用'eval()',那麼不要在unsanitized用戶輸入中使用它。考慮如果用戶鍵入'os.system(「rm -rf /」)'會發生什麼情況。 –