Python字符串格式化详解:%s、format()与f-string用法对比

竹里
竹里
发布时间:2026-10-16 | 6人浏览过
原创

本文深入解析Python中三种主流字符串格式化方式:传统的%s操作符、功能强大的format()方法以及高效的f-string。通过具体代码示例,详细讲解整数、浮点数、字符串及对齐补齐等格式化规则,对比各方法的适用场景与注意事项,帮助开发者选择最适合的格式化方案。

什么是字符串格式化?

字符串格式化是指在一个固定的字符串模板中,根据变量的值动态替换部分内容,从而生成新字符串的过程。

生活中有一个形象的例子:书包本身是固定的,但每天放入的物品不同。这里的“书包”相当于固定的字符串模板,而“每天放入的不同物品”则相当于随变量变化的内容。

结合代码示例可以更直观地理解字符串格式化的概念,具体代码如下。

# 今天是 Date ,星期 Week 
# 这里的 Date ,我们换成 '2000年1月1日' ; Week 我们换成 '一'

Date = '2000年1月1日'
Week = '一'

print('今天是 ' + str(Date) + ' 星期' + Week)
# Date 与 Week 两个变量会随着值的改变输出今天的日期与星期几; 这个就是字符串的格式化。

使用格式化的场景与目的

  • 在发送邮件时。
  • 在发送短信时。
  • 在APP推送新闻消息时。
  • 对于大量重复性信息,使用格式化可以显著减少代码编写量。

在上述场景中,接收到的邮件、短信或新闻内容主体通常一致,但接收者不同。此时,只需编辑一个统一的内容模板,通过格式化操作替换接收人信息,即可让不同用户接收到内容相同但个性化信息不同的消息。

Python中主要的格式化方式有三种。

基于类型定义的格式化 - %s

字符串格式化可通过操作符 % 实现,例如 'my name is %s, my age is %s' % ('neo', 18)。

格式符为 %s。

连接符:格式化字符串与格式符变量之间使用 % 连接,% 两侧通常各保留一个空格以提高可读性。

注意:当字符串中只有一个变量时,无需使用元组包裹;若超过一个变量,则必须使用元组进行包裹。

具体示例如下。

info_01 = 'My name is %s , age is %s ' % ('Neo', 19)
print(info_01)

# >>> My name is Neo , age is 19

info_02 = 'My name is %s , age is %s '

name_01 = 'Neo'
age_01 = 18
name_02 = 'Jack'
age_02 = 17

print(info_02 % (name_01, age_01))
print(info_02 % (name_02, age_02))

# >>> My name is Neo , age is 18
# >>> My name is Jack , age is 17

关于整数的输出格式

  • %o:表示八进制(oct)。
  • %d:表示十进制(dec)。
  • %x:表示十六进制(hex)。
print("整数:%d,%d,%d" % (1, 2.2, 345))
print("整数不足5位,左边补空格   %5d   " % 11)
print("整数不足5位,左边补0     %05d   " % 11)
print("整数不足5位,右边补空格  %-5d   " % 11, "end")
print("八进制 %o" % 222)
print("十六进制 %x" % 12)

执行结果如下。

>>> 整数:1,2,345 >>> 整数不足5位,左边补空格 11 >>> 整数不足5位,左边补0 00011 >>> 整数不足5位,右边补空格 11 end >>> 八进制 336 >>> 十六进制 c

包含以下知识点:

  • 当有多个参数需要格式化输出时,必须使用元组 (1,2,3);注意不能使用列表,因为列表是可变的。
  • 若传入浮点数如 2.2,最终输出结果为 2,仅取整数部分,不进行四舍五入。
  • 若传入字符串 '2.2',程序会报错。

关于浮点数的输出格式

print("浮点数:%f,%f " % (1, 22.22))
print("浮点数保留两位小数:%.2f  " % 22.222)
print("浮点数保留两位小数,宽5位,不足补0:%05.5f " % 2.222)

执行结果如下。

# >>> 浮点数:1.000000,22.220000 # >>> 浮点数保留两位小数:22.22 # >>> 浮点数保留两位小数,宽5位,不足补0:02.22

包含以下知识点:

  • 默认保留6位小数,可通过 .2f 形式指定小数位数,其中 2 代表保留两位。

关于字符串的输出格式

print("字符串:%s,%s,%s" % (1, 22.22, [1, 2]))
print("字符串不足5位,左边补空格   %5s   " % '2')
print("字符串不足5位,右边补空格   %-5s   " % '2', "end")
print("字符串宽10位,截取两位      %10.2s " % "hello.world")

# 执行结果如下:
# >>> 字符串:1,22.22,[1, 2]
# >>> 字符串不足5位,左边补空格       2   
# >>> 字符串不足5位,右边补空格   2        end
# >>> 字符串宽10位,截取两位              he 

包含以下知识点:

  • 可传入任意类型数据,如整数、浮点数、列表、元组甚至字典,系统会自动将其转换为字符串类型。

字符串格式化函数 - format()

format() 函数是Python中最常用的字符串格式化方式之一。

  • string.format() 函数同样用于格式化字符串。
  • 使用 format() 函数时,字符串主体使用 {} 大括号替代原有的格式符。
  • 基本用法为 string.format(data, data, data…)。
  • 不带编号,即 {}。
  • 带数字编号,可调整顺序,即 {1}、{2}。
  • 带关键字,即 {a}、{b}。

具体示例如下。

print("今天是{},{}的{}岁生日会".format("2020年1月1日", "Neo", 18))

print("今天是{0},{1}的{2}生日会".format("2020年1月1日", "Neo", 18))

print("今天是{today},{name}的{age}生日会".format(today="2020年1月1日", name="Neo", age=18, hight="175"))

print("今天是{name}的{key}生日会,他在尝试{}".format("喝酒", name="Neo", key=18))

# 以下会报错
#print("今天是{0}的{}生日会".format("Neo", 18))
#print("今天是{name}的{key}生日会,他在尝试{}".format( name="Neo", key=18,"喝酒"))

#执行结构如下:
# >>> 今天是2020年1月1日,Neo的18岁生日会
# >>> 今天是2020年1月1日,Neo的18生日会
# >>> 今天是2020年1月1日,Neo的18生日会
# >>> 今天是Neo的18生日会,他在尝试喝酒

需要注意以下几点:

  • 当只写 {} 时,默认按传入值的顺序读取。
  • 当写有数字编号 {1} 时,可读取对应位置的值,索引从 0 开始。
  • 当指定了关键字 {name} 时,若不指定 name=xxx,程序会报错。
  • 当同时指定了关键字和 {} 时,传入带关键字指定的值必须写在后面,类似于函数调用中形参在前、实参在后的规则。
  • {} 和 {1} 不能共存于同一字符串中。

关于 format() 函数的总结。

使用 format 时,一个字符串内的格式化输出应只采用一种方式,混合使用容易引发问题且无必要。

format() 函数 - 指定数据类型输出

print("整数{:d}".format(123))
print("浮点数{:5.2f}".format(123.19))
print("字符串{:s}".format('123'))
print("八进制{:o}".format(12))
print("十六进制{:x}".format(13))

# 执行结果如下
# >>> 整数123
# >>> 浮点数123.19
# >>> 字符串123
# >>> 八进制14
# >>> 十六进制d

相关知识点。

  • 若指定了 :s,则只能传入字符串值,传入其他类型值不会自动转换。
  • 若不指定类型,传入任何类型均可成功格式化输出;如无特殊需求,可不指定类型。
  • 若要结合数字编号和关键字使用,可参考以下写法。
print("关键字 {num:d}".format(num=123))
print("数字编号 {0:d},{1:s}".format(123, "123"))

# 执行结果如下
# >>> 关键字 123
# >>> 数字编号 123,123

format() 函数 - 位数补齐

print('默认左对齐,宽度为10,不足补空格:{:10}'.format("123"), "end")

print('左对齐,宽度为10,不足补空格:{:<10}'.format("123"), "end")

print('右对齐,宽度为10,不足补空格:{}{:>10}'.format("start", "123"))print('右对齐,宽度为10,取两位小数,不足补0:{:0>10.2f}'.format(22.22555))

# 执行结果如下:
# >>> 默认左对齐,宽度为10,不足补空格:       123 end
# >>> 左对齐,宽度为10,不足补空格:123        end
# >>> 右对齐,宽度为10,不足补空格:start       123
# >>> 右对齐,宽度为10,取两位小数,不足补0:0000022.23

相关知识点。

  • 默认左对齐,可不加 < 符号。
  • 若不指定数据类型,传入什么类型的值都能成功格式化输出。

format() 函数 - 拓展用法

print("总是显示符号:{:0>+8.2f},{:0>+8.2f}".format(3.14, -3.14))

print("百分数:{:%} {:.2%}".format(3 / 7, 3 / 7))

print("逗号分隔,一般用在金钱 {:,}".format(12345678)
      
# 执行结果如下:
# >>> 总是显示符号:000+3.14,000-3.14
# >>> 百分数:42.857143% 42.86%
# >>> 逗号分隔,一般用在金钱 12,345,678

相关知识点。

  • + 的意义在于,即使输出正数也能显示符号。
  • 百分数表示真实的百分比,而非仅添加 % 符号;例如 0.25667 转换为百分数为 25.67%。
  • , 用于固定每三位数字分隔;若传入字符串会报错。

新的格式化方法:f-strings

  • 首先需要定义一个变量。
  • 在字符串主体前添加 f 符号。
  • 在需要格式化的位置使用 {变量名}。

具体示例如下。

name = "Neo"
age = 18
message = f"Hello,{name}"
print(message + "!")

info = f"my name is {name}, and age is {age}"
print(info + ".")

# 执行结果如下:
# >>> Hello,Neo!
# >>> my name is Neo, and age is 18.

至此,关于Python字符串格式化方式的介绍到此结束,更多相关Python字符串格式化内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表