Python中的字符串格式化输出方法对比

C 语言风格

a = 0b1010010
b = 'value'

print("Binary: %d %s" % (a, b))

# 对应 C 语言的如下
printf("Binary: %d %s", a, b)
  • 其实就是类似 C 语言的 printf 函数,左边是占位符,右边是数据
  • ⚠️
    • 占位符和右边数据的数据类型必须严格一一对应,每次我们新增都要手动检查,很容易写错
    • 可读性比较差,特别是右边的数据写法比较复杂的时候
    • 如果有相同的数据要输出,你也不得不重复占位重复写
  • 改进
    • %(key)
      • Python 中的 % 格式输出还支持将 dict 作为数据传入,使用方法是在常规的 % 符号后面加 (key),此时就会传入 dict[key]此时右边的数据传入顺序可以是随意的了,添加也会比较方便
      • 而且要是有相同的数据要传入的话,我们只要在 dict 中放一份,比如 print("Binary: %(name1)d %(name1)d" % {'name1': a})
      • ⬇️但是可读性更差了,复杂的输出会更复杂,而简单的输出用 dict 又多此一举
  • 💊总结来说,不用这个

str.format

  • {} 来取代之前的 % 格式来作为占位符

  • 类似输出 % 要用 %% 一样,想输出 {} 要用 {{}}

  • {}

    内可以放什么❓

    • 索引
      • 就会去后面的数据找对应索引的值
      • print('{1} {0}'.format(a, b)),输出 b a
    • ...
    • ⬇️但是要输出的格式越复杂,{} 里面放的东西也越复杂,可读性差
  • 💊只比 C 语言风格好一点点,还是不要用这个

f-strings

  • 在 Python 3.6 中加入的新特性,写法为 f"",注意有个前缀 f
  • 优点⬆️
    • 可以在里面引用所有当前 scope 里的变量,方法是 {variable_name}
    • {} 里面可以放表达式,比如 print(f"{int(3.1415) \* 3}")
    • 在2⃣️中可以放在 {} 的东西也都可以放在这里面
  • 💊用它!
posted @ 2021-04-13 10:45  MartinLwx  阅读(11)  评论(0编辑  收藏  举报