1 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
正如 JimB 所說(shuō),停止使用字符串。Python 2.x 字符串只是原始字節(jié)。Go 字符串是 UTF-8。這需要編碼、檢查錯(cuò)誤等。另一方面,您還可以從字符串中獲得更多功能。此外,構(gòu)建字符串需要額外的內(nèi)存分配。
如果使用 Python 實(shí)現(xiàn)更改為 unicode 字符串(升級(jí)到 3.x 或 unicode 字符串實(shí)現(xiàn)為 2.x),性能將會(huì)下降。如果你改成和 Go 版本類似的編碼,你會(huì)得到更好的性能:
package main
import ("os"
"bufio")
func main() {
reader := bufio.NewReader(os.Stdin)
scanner := bufio.NewScanner(reader)
writer := bufio.NewWriter(os.Stdout)
newline := []byte("\n")
for scanner.Scan() {
writer.Write(scanner.Bytes())
writer.Write(newline)
}
}
在我的系統(tǒng)上,使用 6500 萬(wàn)行的單詞列表,Python:
real 0m12.724s
user 0m12.581s
sys 0m0.145s
和 Go 版本:
real 0m4.408s
user 0m4.276s
sys 0m0.135s
還應(yīng)該注意的是,就性能比較而言,這不是一個(gè)好例子。它不代表真正的應(yīng)用程序會(huì)做什么,以某種方式處理數(shù)據(jù)。
- 1 回答
- 0 關(guān)注
- 188 瀏覽
添加回答
舉報(bào)