Python字符串format方法完整指南:从基础到高级用法

宋时安
宋时安
发布时间:2026-10-12| 5人浏览过
原创

本文深入解析Python中format方法的多种用法,涵盖按顺序匹配、索引引用、关键字参数及混合使用规则。详细讲解数值精度控制、进制转换、字符串对齐与填充,以及利用*和**对列表、字典进行拆包的高级技巧,助您掌握高效字符串处理方案。

format是Python字符串内置的一个方法,主要用于实现字符串的格式化输出。其核心机制是使用大括号{}作为占位符,用来标识需要被替换的内容位置。

1、基本用法

1. 按照{}的顺序依次匹配括号中的值

s = "{} is a {}".format('Tom', 'Boy')
print(s) # Tom is a Boy

s1 = "{} is a {}".format('Tom')
# 抛出异常, Replacement index 1 out of range for positional args tuple
print(s1)

2. 通过索引的方式去匹配参数

s = "{0} is a {1}".format('Tom', 'Boy')
print(s) # Tom is a Boy

s1 = "{1} is a {2}".format('Tom', 'Lily', 'Girl')
print(s1) # Lily is a Girl

在字符串中,索引的顺序可以任意调整,这不会影响最终参数的匹配结果。

s = "{1} is a {0}".format('Boy', 'Tom', )
print(s) # Tom is a Boy

3. 通过参数名来匹配参数

s = "{name} is a {sex}".format(name='Tom', sex='Boy')
print(s) # Tom is a Boy

同理,如果参数名称已经确定,可以直接利用{}内的名称进行格式化引用,无需关心位置。

name = 'Tom'
sex = 'Girl'
# 以f开头表示在字符串中支持大括号内的python表达式   此用法3.6之后支持
s = f"{name} is a {sex}"
print(s) # Tom is a Boy

4. 混搭使用

可以通过索引和参数名混合的方式进行参数匹配。

s = "My name is {}, i am {age} year old, She name is {}".format('Liming', 'Lily', age=10)
print(s) # My name is Liming, i am 10 year old, She name is Lily

需要注意的是,命名参数必须放在所有位置参数之后,否则会导致编译报错。

s = "My name is {}, i am {age} year old, She name is {}".format('Liming', age=10, 'Lily')
print(s)  # SyntaxError: positional argument follows keyword argument

另外,不可以将索引和默认的位置编号混合使用,否则也会引发异常。

s = "{} is a {0}".format('Boy', 'Tom', )
print(s)

s1 = "{} is a {1}".format('Boy', 'Tom', )
print(s1)

#以上两种写法均报异常。
# ValueError: cannot switch from automatic field numbering to manual field specification

2、进阶用法

1. 通过对象的属性

class Names():
    name1='Kevin'
    name2='Tom'
print 'hello {names.name1} i am {names.name2}'.format(names=Names) 
# hello Kevin i am Tom

2. 支持对参数部分引用

可以通过索引对参数的部分进行取值。例如,若参数s='world',则{s[0]}会提取出首字母'w'。

s = "The word is {s}, {s[0]} is initials".format(s='world')
# The word is world, w is initials
print(s)

3. 数字的处理

如何使用format保留两位小数?需使用:.2f格式说明符。在使用%进行格式化时,我们使用的是%.2f。

s = 'π is {:.2f}'.format(3.1415926)
print(s) # π is 3.14

s1 = 'π is %.2f'% 3.1415926
print(s1) # π is 3.14

同时这种方法还可以用于字符串截取,不过数字后面就不能加f了。

s = "{:.1}".format('Hello')
print(s) # H 

给数字加千位符

s = "{:,}".format(1000000)
print(s) # 1,000,000

将数字转换成二进制

s = "{:b}".format(8)
print(s) # 1000

将数字转换成八进制

s = "{:o}".format(8)
print(s) # 10

将数字转换成十六进制

s = "{:X}".format(12)
print(s) # C

4. 格式处理

通过:+数字指定转换后的字符串长度,不足的部分用空格补充。

s = "{:2}b".format('a')
print(s) # a b  (a后面补了一个空格)
# 如果指定的长度小于参数的长度,按照原参数匹配
s1 = "{:2}World".format('Hello')
print(s1) # HelloWorld

5. 字符的填充

可通过:符号^数字进行字符串的填充。其中数字为填充后的字符串总长度。

s = "{:*^10}".format('Hello')
print(s) # **Hello***

s = "{:-^20}".format('123456')
print(s) # -------123456-------

如果数字小于字符串的长度,则不进行填充操作。

s = "{:*^3}".format('Hello')
print(s) # Hello

6. list、tuple的拆分

在format格式化时,可使用* 或者 ** 进行对list、tuple拆分。

foods = ['fish', 'beef', 'fruit']
s = 'i like eat {} and {} and {}'.format(*foods)
# i like eat fish and beef and fruit
print(s)

foods = ['fish', 'beef', 'fruit']
s = 'i like eat {2} and {0} and {1}'.format(*foods)
# i like eat fruit and fish and beef
print(s)

dict_temp = {'name': 'Lily', 'age': 18} 
# 字典需要用 ** 进行拆分
s = 'My name is {name}, i am {age} years old'.format(**dict_temp)
print(s) # My name is Lily, i am 18 years old

总结

到此这篇关于python中format用法的文章就介绍到这了,更多相关python中format用法内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。