简短版本:如果s是字符串,则s = s + \'c\'可以就地修改字符串,但t = s + \'c\'不能。但是操作如何s + \'c\'知道它处于哪种场景呢?
长版:
\nt = s + \'c\'需要创建一个单独的字符串,因为程序随后需要旧字符串 ass和新字符串 as t。
s = s + \'c\'如果是唯一的引用,则可以就地修改字符串s,因为程序只想s成为扩展字符串。如果末尾有多余字符的空间,CPython 实际上会执行此优化。
考虑这些重复添加字符的函数:
\ndef fast(n):\n s = \'\'\n for _ in range(n):\n s = s + \'c\'\n t = s\n del t\n\ndef slow(n):\n s = \'\'\n for _ in range(n):\n t = s …Run Code Online (Sandbox Code Playgroud) 我正在使用 timeit 对项目的一些代码进行基准测试(使用免费的 replit,因此需要 1024MB 内存):
\ncode = \'{"type":"body","layers":[\'\n\nfor x, row in enumerate(pixels):\n for y, pixel in enumerate(row):\n if pixel != (0, 0, 0, 0):\n code += f\'\'\'{{"offsetX":{-start + x * gap},"offsetY":{start - y * gap},"rot":45,"size":{size},"sides":4,"outerSides":0,"outerSize":0,"team":"{\'#%02x%02x%02x\' % (pixel[:3])}","hideBorder":1}},\'\'\'\n \ncode += \'],"sides":1,"name":"Image"}}\nRun Code Online (Sandbox Code Playgroud)\n该循环针对给定图像内的每个像素运行(当然效率不高,但我还没有实现任何减少循环时间的方法),因此我可以在循环中获得的任何优化都是值得的。
\n我记得只要你组合 3 个以上的字符串\xe2\x80\x94,f 字符串就比字符串连接更快,如图所示,我组合了超过3个字符串\xe2\x80\x94,所以我决定将循环内的 += 替换为 f 字符串并查看改进。
\ncode = \'{"type":"body","layers":[\'\n\nfor x, row in enumerate(pixels):\n for y, pixel in enumerate(row):\n if pixel != (0, 0, 0, 0):\n code = f\'\'\'{code}{{"offsetX":{-start + x …Run Code Online (Sandbox Code Playgroud)