內置的input
和sys.stdin.readline
功能並不完全一樣,而哪一個更快可能取決於您正在做什麼的細節。正如aruisdante所評論的那樣,Python 3中的差異比Python 2中的差異要小,因爲您提供的引用來自但是仍然存在一些差異。
第一個區別是input
有一個可選的提示參數,如果解釋器以交互方式運行,將會顯示該參數。這會導致一些開銷,即使提示是空的(默認)。另一方面,如果您確實需要提示,則可能會比在每個readline
調用之前執行print
更快。
下一個不同之處在於input
從輸入結尾剝離了任何換行符。如果你要去掉那個,可以讓input
爲你做,而不是做sys.stdin.readline().strip()
。
最後的區別是如何指示輸入的結尾。如果沒有更多輸入(標準輸入已在另一端關閉),則在您調用input
時將調用EOFError
。另一方面,sys.stdin.readline
會在EOF中返回一個空字符串,您需要知道該字符串用於檢查。
還有第三種選擇,在sys.stdin
上使用文件迭代協議。這很可能與調用readline
非常相似,但也許更好的邏輯。
我懷疑,雖然各種選項之間的性能差異可能存在,但它們可能比從磁盤簡單讀取文件(如果它很大)的時間成本更小,並且無論您在做什麼它。我建議你避免過早優化的陷阱,只做你的問題最自然的事情,如果程序太慢(「太慢」是非常主觀的),你可以做一些分析,看看最需要什麼時間。不要花大量精力去決定採取不同的投入方式,除非它真的很重要。
這在'python 2.7'中可能是正確的,因爲'input'試圖將輸入字符串評估爲python表達式。有可能是一個優化,使讀'input()= 1'比'int(sys.stdin.readline())'更快。在'python 3.x'中,'input()'已經變成'python 2.7'的'raw_input()',這意味着它只是將輸入作爲一個字符串返回並且不進行評估,所以它可能完全相同。 – aruisdante