1.格式化字符串
- 格式化字符串 format() 用于补充字符串中的内容,通常是以下情况:
year = 2025
t = "今年是year年"
print(t)
# 输出 今年是year年
变量在字符串中不起作用,这时候就需要格式化字符串。先从简单的来说:
t = "今年是{}年".format(2025)
print(t)
# 输出 今年是2025年
t = "今年是{}年,现在是{}月".format(2025,5)
print(t)
# 输出 今年是2025年,现在是5月
用 花括号 加 format() 函数,且支持多个花括号。进阶一点便是给花括号加上索引、关键字或者两者相结合:第一个程序为索引,第二个为索引加关键字
t = "今年{1}2025年,{0}2024年".format("不是","是")
print(t)
# 输出 今年是2025年,不是2024年
t = "今年是{year}年,{0}2024年".format("不是",year = 2025)
print(t)
# 输出 今年是2025年,不是2024年
- 再进阶一步的情况是,为format()加一些参数:
对齐方式[align]、指定填充元素[0]、指定空间宽度[width]、符号选项[sign]....
首先是四个对齐方式(align):
< | 强制字符串在可用空间内左对齐(默认) |
> | 强制字符串在可用空间内右对齐 |
= | 强制将填充放置在符号(如果有)之后但在数字之前的位置(这适用于以+0000012形式打印字符串) |
^ | 强制字符串在可用空间内居中对齐 |
t = "{:^}".format(2025)
print(t)
# 输出2025
t = "{:^10}".format(2025)
print(t)
# 输出 2025
可以看出第一个并没有居中因为空间宽度不够,第二个指定了10个空格宽度才会居中显示;
{:^10} 冒号左边表示填写索引或者关键字,右边是格式化选项:
t = "{1:^10}{0:^10}".format(25,20)
print(t)
# 输出 20 25
t = "{1:>10}{0:<10}".format(25,20)
print(t)
# 输出 2025
当然也可以指定填充元素这样就不是空格了 {:指定填空的元素^10}:
t = "{1:0>10}{0:0<10}".format(25,20)
print(t)
# 输出00000000202500000000
t = "{1:$>10}{0:%<10}".format(25,20)
print(t)
# 输出$$$$$$$$2025%%%%%%%%
t = "{:顺^10}".format(2025)
print(t)
# 输出顺顺顺2025顺顺顺
有一点需要注意,当填充元素为0时可以省略对齐方式采用默认的左对齐,但是填充元素非0时不可省略对齐方式;且填空元素为0可以感知正负号;填空元素必须时单个元素,任何类型均可,甚至汉字。
符号选项(sign)有以下三种且只对数字类型有效:
+ | 正数在前面添加正号,负数在前面添加负号 |
- | 只有负数前面添加负号,默认行为 |
空格 | 正数在前面添加一个空格,负数在前面添加负号 |
t = "{:+} {:-}".format(-20,25)
print(t)
# -20 25
千分位分隔符[grouping_option],用逗号或者下划线表示:
t = "{:,} {:_}".format(12345,6789)
print(t)
# 12,345 6_789
t = "{:+,} {:_}".format(-12345,6789)
print(t)
'''-12,345 6_789'''
精度选项[.precision]:
对于type设置为 'f' 或 'F' 的浮点数来说,是限定小数点后显示多少个数位 |
对于type设置为 'g' 或 'G' 的浮点数来说,是限定小数点前后一共显示多少个数位 |
对于非数字类型来说,限定的是最大字段的大小 |
对于整数类型来说,则不允许使用精度选项 |
t = "{:.2f}".format(3.1415)
print(t)
# 3.14
t = "{:.2g}".format(3.1415)
print(t)
# 3.1
t = "{:.2}".format("aptx")
print(t)
# ap
注意精度选项在最前面要加上一个点。
[type]类型选项:决定了数据应当如何呈现
以下是适用于整数:
b | 将参数以二进制形式输出,在b前面加一个#会有二进制提示(0b) |
c | 将参数Unicode字符的形式输出 |
d | 将参数以十进制形式输出 |
o | 将参数以八进制形式输出,在o前面加一个#会有八进制提示 |
x | 将参数以十六进制形式输出,在x前面加一个#会有十六进制提示 |
X | 将参数以十六进制形式输出 |
n | 跟 d 类似,不同之处在于它会使用当前语言环境设置的分隔符插入到恰当的位置 |
None | 跟 d 一样 |
t = "{:b}".format(2025)
print(t)
# 11111101001
t = "{:#b}".format(2025)
print(t)
# 0b11111101001
以下适用于浮点数和复试:其实也可以用于整数,会自动把整数转换成等值的浮点数
e | 将参数以科学记数法的形式输出(以字母 e 来标示指数,默认精度为6) |
E | 将参数以科学记数法的形式输出(以字母 E 来标示指数,默认精度为6) |
f | 将参数以定点表示法的形式输出(‘不是数’用nan标示,无穷用inf标示,默认精度为6) |
F | 将参数以定点表示法的形式输出(‘不是数’用NAN标示,无穷用INF标示,默认精度为6) |
g | 通用格式,小数以 f 形式输出,大数以 e 形式输出 |
G | 通用格式,小数以 F 形式输出,大数以 E 形式输出 |
n | 跟 g 类似,不同之处在于它会使用当前语言环境设置的分隔符插入到恰当的位置 |
% | 以百分比的形式输出(将数字乘以100并显示为定点表示法(f)的形式),后面附带一个百分号) |
None | 类似于 g ,不同之处在于使用定点表示法时,小数点后将至少显示一位;默认精度与所给定值的精度一致 |
t = "{:f}".format(3.14159)
print(t)
# 3.141590
t = "{:.2f}".format(3.14159)
print(t)
# 3.14
''' 关键字定义精度'''
t = "{:.{pre}f}".format(3.1415,pre = 2)
print(t)
# 3.14
t = "{:g}".format(3141592)
print(t)
# 3.14159e+06
t = "{:{fill}{align}{width}.{pre}{type}}".format(3.1415,fill="+",align="^",width=10,pre= 2,type="f")
print(t)
# +++3.14+++
不仅精度可以用关键字定义,最后一个程序即是表示以上所有的格式都可采用关键字定义,但是定义时必须加引号即字符串形式
2. f 字符串(f-string)[仅适用于Python3.6及以上版本]
- 在字符串前加一个 f/F , 是格式化字符串的语法糖。
year = 2025
t = f"今年是{year}年"
print(t)
# 今年是2025年
t = f"1+2等于{1+2},2乘2等于{2*2}"
print(t)
# 1+2等于3,2乘2等于4
t = f"{3.1415:.2f}" '''由{:.2f}.format(3.1415)转换而来'''
print(t)
# 3.14
fill="+"
align="^"
width=10
prec= 2
type="f"
t = f"{3.1415:{fill}{align}{width}.{prec}{type}}"
print(t)
# +++3.14+++