目录
一. 格式化输出的三种方式
name = "Max"
age = 18
# 最古老的用法, %s和%d表示格式
print("%s is %d years old" % (name, age)) # Max is 18 years old
# 在python 3.0后, 可以使用format()
print("{} is {} years old".format(name, age)) # Max is 18 years old
# {}中带数字,对应后面参数的索引
print("{1} is {0} years old".format(age, name)) # Max is 18 years old
# 在python 3.6, 可以使用f""
print(f"{name} is {age} years old") # Max is 18 years old
# {}中使用表达式
bags = 3
apples_in_bag = 12
print(f"There are total {bags * apples_in_bag} apples") # There are total 36 apples
# {}中使用字典
user = {"name": "Max", "age": 18}
print(f"{user['name']} is {user['age']} years old") # Max is 18 years old
# {}中使用函数
def ret_max(x, y):
return x if x > y else y
a, b = 3, 5
print(f"Max of {a} and {b} is {ret_max(a, b)}") # Max of 3 and 5 is 5
| 格式描述符 | 含义与作用 | 适用变量类型 |
| s | 普通字符串格式 | 字符串 |
| b | 二进制整数格式 | 整数 |
| c | 字符格式,按unicode编码将整数转换为对应字符 | 整数 |
| d | 十进制整数格式 | 整数 |
| o | 八进制整数格式 | 整数 |
| x | 十六进制整数格式(小写字母) | 整数 |
| X | 十六进制整数格式(大写字母) | 整数 |
| e | 科学计数格式,以 e 表示 ×10^ | 浮点数、复数、整数(自动转换为浮点数) |
| E | 与 e 等价,但以 E 表示 ×10^ | 浮点数、复数、整数(自动转换为浮点数) |
| f | 定点数格式,默认精度(precision)是6 | 浮点数、复数、整数(自动转换为浮点数) |
| F | f 等价,但将 nan 和 inf 换成 NAN 和 INF | 浮点数、复数、整数(自动转换为浮点数) |
| g | 通用格式,小数用 f,大数用 e | 浮点数、复数、整数(自动转换为浮点数) |
| G | 与 G 等价,但小数用 F,大数用 E | 浮点数、复数、整数(自动转换为浮点数) |
二. datatime格式化
import datetime
now = datetime.datetime.now()
print(f'{now:%Y-%m-%d %H:%M:%S}') # 2022-11-09 21:57:55
| 格式描述符 | 含义 | 显示样例 |
| %a | 星期几(缩写) | 'Sun' |
| %A | 星期几(全名) | 'Sunday' |
| %w | 星期几(数字,0 是周日,6 是周六) | '0' |
| %u | 星期几(数字,1 是周一,7 是周日) | '7' |
| %d | 日(数字,以 0 补足两位) | '07' |
| %b | 月(缩写) | 'Aug' |
| %B | 月(全名) | 'August' |
| %m | 月(数字,以 0 补足两位) | '08' |
| %y | 年(后两位数字,以 0 补足两位) | '14' |
| %Y | 年(完整数字,不补零) | '2014' |
| %H | 小时(24小时制,以 0 补足两位) | '23' |
| %I | 小时(12小时制,以 0 补足两位) | '11' |
| %p | 上午/下午 | 'PM' |
| %M | 分钟(以 0 补足两位) | '23' |
| %S | 秒钟(以 0 补足两位) | '56' |
| %f | 微秒(以 0 补足六位) | '553777' |
| %z | UTC偏移量(格式是 ±HHMM[SS],未指定时区则返回空字符串) | '+1030' |
| %Z | 时区名(未指定时区则返回空字符串) | 'EST' |
| %j | 一年中的第几天(以 0 补足三位) | '195' |
| %U | 一年中的第几周(以全年首个周日后的星期为第0周,以 0 补足两位) | '27' |
| %w | 一年中的第几周(以全年首个周一后的星期为第0周,以 0 补足两位) | '28' |
| %V | 一年中的第几周(以全年首个包含1月4日的星期为第1周,以 0 补足两位) | '28' |
三. 位数
val = 1.5687
print(f'{val:.2f}') # 1.57
print(f'{val:.5f}') # 1.56870
chs = "ASDFGHJK"
print(f'{chs:.4}') # ASDF
注1:width.precision 用于不同格式类型的浮点数、复数时的含义也不同:用于 f、F、e、E 和 % 时 precision 指定的是小数点后的位数,用于 g 和 G 时 precision 指定的是有效数字位数(小数点前位数+小数点后位数)。
注2:width.precision 除浮点数、复数外还可用于字符串,此时 precision 含义是只使用字符串中前 precision 位字符。
四. 左/右/居中对齐
< 左对齐(字符串默认对齐方式)
> 右对齐(数值默认对齐方式)
^ 居中
0width 表示用0补足宽度(参考下方示例)
注1:0width 不可用于复数类型和非数值类型,width.precision 不可用于整数类型。
# Format width
num = "Nu"
sq = "squ"
cube = "cube"
print(f"{num:>2} {sq:>5} {cube:>7}")
for i in range(1, 21, 3):
print(f"{i:02} {i*i:5} {i*i*i:7}")
'''
Nu squ cube
01 1 1
04 16 64
07 49 343
10 100 1000
13 169 2197
16 256 4096
19 361 6859
'''
# Format string
s1 = 'a'
s2 = 'bb'
s3 = 'ccc'
s4 = 'dddd'
s5 = '~'
print(f'{s1:>16}')
print(f'{s2:>16}')
print(f'{s3:>16}')
print(f'{s4:>16}')
print(f'{s5:>016}') # 用0不足宽度
'''
a
bb
ccc
dddd
000000000000000~
'''
五. 数字符号格式化
a = 300
print(f"int: {a:d}") # int: 300
print(f"hex: {a:#x}") # hex: 0x12c
print(f"oct: {a:#o}") # oct: 0o454
print(f"sci: {a:e}") # sci: 3.000000e+02
b = 123
c = -123
print(f"{b:+}") # +123
print(f"{c:+}") # -123
print(f"{b:-}") # 123
print(f"{c:-}") # -123
print(f"{b: }") # 123
print(f"{c: }") # -123
数字符号相关格式描述符
注:仅适用于数值类型。
| 格式描述符 | 含义与作用 |
| + | 负数前加负号(-),正数前加正号(+) |
| - | 负数前加负号(-),正数前不加任何符号(默认) |
| 空格 | 负数前加负号(-),正数前加一个空格 |
# 切换数字显示方式
注1:仅适用于数值类型。
注2:# 对不同数值类型的作用效果不同.
| 数值类型 | 不加#(默认) | 加# | 区别 |
| 二进制整数 | '1111011' | '0b1111011' | 开头是否显示 0b |
| 八进制整数 | '173' | '0o173' | 开头是否显示 0o |
| 十进制整数 | '123' | '123' | 无区别 |
| 十六进制整数(小写字母) | '7b' | '0x7b' | 开头是否显示 0x |
| 十六进制整数(大写字母) | '7B' | '0X7B' | 开头是否显示 0X |
本文详细介绍了Python中格式化输出的三种方式:%s/d格式、format()函数和f-string,涵盖了数字、datetime格式、位数对齐、数字符号以及特殊格式描述符的使用。同时探讨了datetime的日期格式化和各种技术细节。





