Python基础–字符串(二)

前言

请确保你已经有一定的Python基础且对字符串有一定了解哦,今天我们依旧来探索字符串的秘密,发车了(是因为笔者太懒才没有一次性写完的),完全不了解的小伙伴们也不用慌,移步Python基础--字符串(一)

格式化字符串

%传统式

  • 你是否看过这些特殊的字符串%s%d呢,相信写过C语言的同学们一定不陌生了,如果没见过也没关系,他们都是一类特殊的字符串,我们称之为格式化字符串,常用于格式化我们的输出,那么我们就从最传统的%式格式化字符串讲解吧

常用的格式化字符串

  • %s
    • 适用于为字符串占位,我本来就是啊
  • %d
    • 适用于为十进制数字占位,类似的还有%x %o %b
  • %f
    • 适用于为浮点数占位
  • .precision
    • 适用于对浮点数精度控制,%.2f保留两位小数,默认是6位小数
  • width
    • 指定占位符占据的宽度,%5d十进制整数至少占5个单位,不够补充
  • flags
    • 指定填充位与对齐,与width位共同控制对齐问题
    • 0,补充前导0
    • -,左对齐,默认是右对齐,将覆盖前导0
    • ,方便正数与负数对齐
    • +,数字补齐符号
  • 可以搭配使用,例如%-5.2f等等
print("% d %+d" % (1234, 1234))
print("% d %+d" % (-1234, -1234))
print("%4d,%4d,%6.2f" % (12, 34, 3.1))
print("%-4d,%-4d,%-6.2f" % (12, 34, 3.1))
print("%04d,%04d,%06.2f" % (12, 234, 3.1))
print("%0-4d,%0-4d,%0-6.2f" % (12, 234, 3.1)) # 产生覆盖行为
 1234 +1234
-1234 -1234
  12,  34,  3.10
12  ,34  ,3.10  
0012,0234,003.10
12  ,234 ,3.10  

format

默认格式化

  • 不再通过%的形式指定,而是默认形式填充,我们只需要负责哪些位置填充什么字符即可
  • 大括号中默认格式填入我们指定的参数,默认顺序是依次填入
    • "{} {}".format(12, "setdown")
  • 有需求可以在大括号中填入参数位置,可以多次使用,每个大括号都要填入位置
    • "{0} {1} {1} {0}".format(12, "setdown")
    • "{0} {1}".format(12, "setdown")
  • 利用键值对传入参数,则括号中必须使用key值
    • "{name} {age}".format(name="setdown", age=12)
    • "{name} {age} {age} {name}".format(name="setdown", age=12)
  • 利用键值对和位置进行复杂传参
    • "{0[name]} {1[age]} {0[0]} {1[1]}".format({"name":"setdown", "age":12}, [12, 34])

format_spec

  • 通过类似于%传统式格式化字符串规范要求
  • :[[fill] align][sign][0][width][.precision][type]
  • fill
    • 填充内容,对于指定宽度填充什么字符,需要显式指定对齐方式
  • align
    • 对齐方式,< ^ >分别是强制左、居中、右对齐
  • sign
    • 展示符号,+正负数都展示符号, 负数展示符号正数留空对齐
  • width
    • 最小宽度,默认为字符串长度
  • precision
    • 控制小数的精度范围,默认是小数点后六位
  • type
    • 常用类型有d f s
print("{:_<4} {:0>6} {:$^10}".format(1, 2, 11))
print("{:04} {:10} {:^10}".format(12, 3, 34))
1___ 000002 $$$$11$$$$
0012          3     34    

f-string

  • 可以通过变量等方式直接转义进入字符串,经常使用,但是也可以使用format_spec来表达更加准确的字符串形式
  • 简易使用方式为f"{name} is about {value}"
  • 使用占位的变量可以与format_spec嵌套使用更加灵活
line = "this is a test string"
print(f"{line= }")

# 可以起调试的作用
a = 1 + 2
print(f"{a=}")

width = 14
align = "^"
value = 123.34
precision = 5
fill = "_"
print(f"{value:{fill}{align}{width}.{precision}f}")
line= 'this is a test string'
a=3
__123.34000___