当前位置: 首页 > 面试题库 >

python + =字符串串联是不好的做法吗?

廉飞捷
2023-03-14
问题内容

我正在阅读《The Hitchhiker’s Guide to Python》,其中有一个简短的代码片段

foo = 'foo'
bar = 'bar'

foobar = foo + bar  # This is good
foo += 'ooo'  # This is bad, instead you should do:
foo = ''.join([foo, 'ooo'])

作者指出,''.join()它并不总是比快+,因此他不反对将其+用于字符串连接。

但是,为什么foo += 'ooo'不好的做法却被foobar=foo+bar认为是好的呢?

  • foo += bar好?
  • foo = foo + 'ooo'好?

在此代码段之前,作者写道:

关于字符串要说的最后一件事是使用join()并不总是最好的。在根据预定数量的字符串创建新字符串的情况下,使用加法运算符实际上会更快,但在上述情况下或要添加至现有字符串的情况下,应使用join()您首选的方法。


问题答案:

这是不好的做法吗?

可以合理地假设此示例不是不好的做法,因为:

  • 作者没有给出任何理由。也许只是他/她不喜欢它。
  • Python文档没有提到这是不好的做法(从我所看到的情况)。
  • foo += 'ooo'(据我了解)具有可读性,比快大约100倍foo = ''.join([foo, 'ooo'])

什么时候应该使用另一个?

字符串串联的缺点是需要创建一个新的字符串并 为每个串联
分配新的内存!这很耗时,但是用很少和很小的字符串就没什么大不了的。当您知道要串联的字符串的数量并且不需要超过2-4个串联时,我会去做。

当加入字符串时,Python只需为最终的字符串分配新的内存,这将效率更高,但计算时间可能更长。另外,由于字符串是不可变的,因此使用字符串列表进行动态变异通常更实用,并且仅在需要时才将其转换为字符串。

使用str.join()创建字符串通常很方便,因为它需要迭代。例如:

letters = ", ".join("abcdefghij")

总结一下

在大多数情况下,使用它更有意义,str.join()但是有时级联同样可行。我个人认为,对大型或许多字符串使用任何形式的字符串连接都是不好的做法,就像str.join()对短而又很少的字符串使用不好的做法一样。

我相信作者只是试图建立一个经验法则,以便更容易地确定何时使用哪些内容,而不必过多地详述或使其变得复杂。



 类似资料:
  • 问题内容: 在Python中,什么时候以及什么时候使用字符串连接与字符串替换比较容易。由于字符串连接的性能有了很大的提高,这(成为更多)是一种风格上的决定,而不是一种实际的决定吗? 举一个具体的例子,如何处理灵活的URI: 编辑:也有关于加入字符串列表和使用命名替换的建议。这些是中心主题的变体,即在什么时候做正确的方法?感谢您的回复! 问题答案: 根据我的机器,连接的速度(明显)更快。但是从风格上

  • 问题内容: 以下语句, 产生输出。 但是,以下内容 产生。 区别在哪里? 问题答案: 您会因为操作符优先级和字符串转换的结合而看到此行为。 JLS 15.18.1 指出: 如果只有一个操作数表达式的类型为String,则对另一操作数执行字符串转换(第5.1.11节),以在运行时生成字符串。 因此,第一个表达式中的右侧操作数将隐式转换为字符串: 但是对于第二个表达式,必须将复合赋值运算符与一起考虑。

  • 问题内容: 我正在开发一个应用程序,在其中执行一些请求以获取对象ID。在它们每个之后,我调用一个方法()将此id作为参数传递(请参见下面的代码)。 可以注意到,我正在将其转换为前缀并将其与前缀连接。但是,我知道我能做到这一点的多种其他方式(或者,例如),并在我的问题的结果:将超过字符串连接更好的可读性,代码约定和效率方面? 谢谢 问题答案: 这很容易成为基于意见的主题,但是我发现格式在大多数情况下

  • 问题内容: 我正在从事Java代码优化。我不清楚或符号之间的区别: 第2行和第3行有什么区别? 问题答案: 这种方法使用StringBuilder创建结果字符串 此方法仅调用的静态方法来获取int的String版本 依次调用

  • 本文向大家介绍通过+(字符串串联)运算符进行字符串串联。,包括了通过+(字符串串联)运算符进行字符串串联。的使用技巧和注意事项,需要的朋友参考一下 您可以使用Java的“ +”运算符来连接字符串。 示例 输出结果

  • 问题内容: 我需要知道是否可以连接字符串,如下所示?如果没有,那么还有什么选择呢? 它应该看起来像人等。 您不能在串联中使用符号,那么替代方法是什么? 问题答案: 仅用于连接。而您错过了增量!