字符串';s"+&引用;Golang和Python之间的操作?
我发现字符串的“+”操作非常慢:字符串';s"+&引用;Golang和Python之间的操作?,python,go,Python,Go,我发现字符串的“+”操作非常慢: func main() { start := time.Now(); s := "" for i:=0;i<100000;i++ { s += "test" } end := time.Now(); fmt.Println(end.Sub(start)) //Output 6.495225211s } 我知道如何优化Go代码。 我希望你能告诉我为
func main() {
start := time.Now();
s := ""
for i:=0;i<100000;i++ {
s += "test"
}
end := time.Now();
fmt.Println(end.Sub(start)) //Output 6.495225211s
}
我知道如何优化Go代码。
我希望你能告诉我为什么
谢谢
我在Python上发现了一件有趣的事情:
s = ""
for i in range(20):
s += 'test'
print(id(s))
输出为:
139842066321960
139842066396912
139842066396912
139842066400072
139842066400072
139842067023232
139842067023232
139842066384304
139842066384304
139842066312528
Python优化了
+=
,避免了每次都创建一个新的字符串对象;之所以这样做是因为在循环中使用+=
连接字符串是一个常见错误。如果可以避免,则不应使用+=
,但是,请使用str.join()
或仅使用'test'*100000
。请参阅,go也正在为每个连接创建新的字符串对象。也许go有一个字符串连接方法,可以一步将多个字符串连接成一个?Python的相关/可能的副本优化了+=
,避免了每次创建新的字符串对象;之所以这样做是因为在循环中使用+=
连接字符串是一个常见错误。如果可以避免,则不应使用+=
,但是,请使用str.join()
或仅使用'test'*100000
。请参阅,go也正在为每个连接创建新的字符串对象。go可能有一个字符串连接方法,可以在一个步骤中将多个字符串连接成一个?相关/可能的
s = ""
for i in range(20):
s += 'test'
print(id(s))