【问题标题】:Is it better to `join` or `format` strings?`join` 或 `format` 字符串更好吗?
【发布时间】:2020-10-03 14:45:32
【问题描述】:

哪个更快 - 更有效 - 更合适?

join

string = "Hello"

concatenate = " ".join([string, "World"])

print(concatenate)

format

string = "Hello"

concatenate = f"{string} World"

print(concatenate)

【问题讨论】:

  • 这主要是意见,但在这种情况下我更喜欢第二种。当您有一个列表开始时,加入似乎更合适,但在这里您创建一个新列表只是为了调用加入。
  • stackoverflow.com/questions/40714555/… 我会查看这篇文章。它可能会对你有所帮助。
  • @MarkMeyer 我个人也会使用format,但它的缺点是它仅适用于 python 3.6 及更高版本。
  • F 字符串要快得多,但在您不知道要传递给join 的字符串数量时不合适。

标签: python concatenation


【解决方案1】:

我们可以使用 join() 函数将字符串与分隔符连接起来。当我们有一个字符串序列时,它很有用,例如字符串列表或元组。 比方说-

s1 = 'Hello'
s2 = 'World'

print('Concatenated String using join() =', "".join([s1, s2]))
Output:
Concatenated String using join() = HelloWorld

print('Concatenated String using join() and whitespaces =', " ".join([s1, s2]))
Output:
Concatenated String using join() and spaces = Hello World

.format 函数 - 我们也可以使用 string format() 函数进行字符串连接和格式化

s1 = 'Hello'
s2 = 'World'

s3 = f'{s1} {s2}'
print('String Concatenation using f-string =', s3)
String Concatenation using f-string = Hello World

name = 'Pankaj'
age = 34
d = Data(10)

print(f'{name} age is {age} and d={d}')
Pankaj age is 34 and d=Data[10]

【讨论】:

    【解决方案2】:

    它们可以做不同的事情并一起使用。

    在您的简单示例中,格式(或 sprintf 或模板版本)更易于阅读且更 Pythonic。

    但是考虑一个文档生成器,它为in_list 中的每个项目提供标题行和内容行。

    • 创建一个空的out_list = []
    • format 标头并将其附加到 out_list
    • 循环遍历in_listformat 中的每个项目并附加到 out_list
    • ”\n”.join(out_list) 获取您的整个文档

    (此时 Jinja2 可能也有用)

    为什么使用 Template ($name) 或 sprintf (%(name)s) 而不是 f-string?

    • Python 版本
    • 多个可能的模板,即Hello $nameBonjour $name
    • 模板在别处定义,可能在另一个函数或文件中。
    • 对于额外的兔子洞,可以生成模板本身 通过代码。假设一个系统动态显示结果字段 来自任意 sql 查询。

    【讨论】:

      猜你喜欢
      • 2014-07-12
      • 1970-01-01
      • 2017-11-13
      • 1970-01-01
      • 2017-04-04
      • 2011-05-09
      • 2016-12-31
      • 2015-01-08
      • 2014-11-25
      相关资源
      最近更新 更多