目录
旧式的 % 运算符(不推荐)
str.format() 方法
位置和关键字参数:
格式化数字:
f-string
表达式和函数调用:
格式化数字:
格式规范的微调 (核心)
对齐字符串
填充字符
数字的零填充
数字的千位分隔符
格式化十六进制、八进制和二进制
在编程语言中,格式化输出是一个非常重要的功能,它允许程序员以可读和美观的方式展示信息。Python 提供了多种方法来格式化字符串,控制数据的显示方式。Python 中的格式化输出,主要包括旧式的 %
格式化、str.format()
方法和 f-string。
%
运算符(不推荐)%
运算符是 Python 早期版本的字符串格式化方法。它使用类似于 C 语言中 printf()
的语法。
name = "John"
age = 30
print("Hello, %s. You are %d years old." % (name, age))
# 输出:Hello, John. You are 30 years old.
str.format()
方法 随着 Python 2.6 的发布,str.format()
方法被引入,它提供了一种更强大和灵活的字符串格式化方式。
name = "John"
age = 30
print("Hello, {}. You are {} years old.".format(name, age)
str.format()
方法可以指定占位符 {}
,而不用关心数据类型。你还可以通过位置或关键字参数来引用特定的值。
print("Hello, {0}. You are {1} years old.".format(name, age)) # 位置参数
print("Hello, {name}. You are {age} years old.".format(name="Alice", age=24)) # 关键字参数
pi = 3.14159
print("Pi is approximately {0:.2f}".format(pi)) # 保留两位小数
在 Python 3.6 中,引入了一种新的字符串格式化方法,称为 f-string(格式化字符串字面量)。f-string 提供了一种更简洁和易读的方式来格式化字符串。
name = "John"
age = 30
print(f"Hello, {name}. You are {age} years old.")
print(f"Twenty times two is {20 * 2}")
# 输出:Twenty times two is 40
pi = 3.14159
print(f"Pi is approximately {pi:.2f}")
字符串在输出时可以进行左对齐、右对齐和居中对齐。使用 str.format()
方法或 f-string,可以通过在冒号 :
之后添加对齐符号 <
、>
或 ^
来实现。
代码示例:
# 左对齐
print(f"|{'left':<10}|") # 宽度为 10 的字段中左对齐
print("|{:<10}|".format("left"))
# 右对齐
print(f"|{'right':>10}|") # 宽度为 10 的字段中右对齐
print("|{:>10}|".format("right"))
# 居中对齐
print(f"|{'center':^10}|") # 宽度为 10 的字段中居中对齐
print("|{:^10}|".format("center"))
输出结果:
|left |
|left |
| right|
| right|
| center |
| center |
在对齐时,可以指定一个字符来填充对齐后剩余的空间。填充字符被放置在对齐字符 <
、>
或 ^
的前面。
代码示例:
# 使用星号 (*) 填充字符
print(f"|{'left':*<10}|") # 使用 * 填充左对齐的剩余空间
print("|{:*<10}|".format("left"))
print(f"|{'right':*>10}|") # 使用 * 填充右对齐的剩余空间
print("|{:*>10}|".format("right"))
print(f"|{'center':*^10}|") # 使用 * 填充居中对齐的剩余空间
print("|{:*^10}|".format("center"))
输出结果:
|left******|
|left******|
|*****right|
|*****right|
|**center**|
|**center**|
对于数字类型,零填充(0-padding)常用于保持数字的固定显示宽度。在指定宽度前添加 0
可以进行零填充。
代码示例:
# 数字的零填充
number = 42
print(f"|{number:0>10}|") # 宽度为 10,右对齐,使用 0 填充
print("|{:0>10}|".format(number))
# 使用格式化浮点数,保留两位小数,并进行零填充
float_number = 3.14159
print(f"|{float_number:0>10.2f}|") # 宽度为 10,保留两位小数,右对齐,使用 0 填充
print("|{:0>10.2f}|".format(float_number))
输出结果:
|0000000042|
|0000000042|
|00000003.14|
|00000003.14|
为了提高大数字的可读性,可以在数字中添加千位分隔符。
代码示例:
# 数字的千位分隔符
number = 1234567890
print(f"{number:,}") # 使用逗号作为千位分隔符
print("{:,}".format(number))
输出结果:
1,234,567,890
1,234,567,890
数字可以被格式化为十六进制、八进制或二进制表示。
代码示例:
# 十六进制
number = 255
print(f"{number:#x}") # 输出: 0xff
print("{:#x}".format(number))
# 八进制
print(f"{number:#o}") # 输出: 0o377
print("{:#o}".format(number))
# 二进制
print(f"{number:#b}") # 输出: 0b11111111
print("{:#b}".format(number))
输出结果:
0xff
0xff
0o377
0o377
0b11111111
0b11111111