Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
字符串';s"+&引用;Golang和Python之间的操作?_Python_Go - Fatal编程技术网

字符串';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))