字符串格式化f-string用法
字符串格式化f-string用法
一. 前言
f-string——格式化字符串常量(formatted string literals), Python3.6新引入的一种字符串格式化方法.
-
形式上是以
f
或F
修饰符引领的字符串(f'xxx'
或F'xxx'
), 以大括号{}
标明被替换的字段; -
本质上并不是字符串常量, 而是一个在运行时运算求值的表达式;
-
功能不逊于传统的
%-formatting
语句和str.format()
函数, 性能优于二者, 且使用起来也更加简洁明了, 推荐!
""" 三种方式 """
a = 'rds'
print('%s' % a)
# rds
print('{}'.format(a))
# rds
print(f'{a}')
# rds
二. 基本用法
{}
中实际存放的是表达式的值, 可以在{}
中进行运算或调用函数:
""" 基操 """
my_name = 'Zed A. Shaw'
print(f"Let's talk about {my_name}.")
# Let's talk about Zed A. Shaw.
""" 表达式 """
a = 'rds'
print(f'{a.upper()}')
# RDS
print(f'{a[:-1]}')
# rd
print(f'{[i ** 3 for i in range(3)]}')
# [0, 1, 8]
三. 引号冲突
{}
内的引号和{}
外的引号定界符不能冲突, 根据需要灵活切换'
和"
, 还可使用'''
和"""
.
""" 错误操作 """
print(f'Hello {'World!'}')
# SyntaxError: invalid syntax
""" 正确操作 """
print(f'Hello {"World!"}')
print(f'Hello {"""World!"""}')
# Hello World!
print(f"Hello {'World!'}")
print(f"Hello {'''World!'''}")
# Hello World!
print(f'''Hello {'World!'}''')
print(f'''Hello {"World!"}''')
print(f'''Hello {"""World!"""}''')
# Hello World!
print(f"""Hello {'World!'}""")
print(f"""Hello {"World!"}""")
print(f"""Hello {'''World!'''}""")
# Hello World!
四. 转义
{}
外可以使用\
转义,{}
内不允许出现\
;- 如需要显示花括号本身, 双花括号
{{
和}}
将被替换为单花括号 - 确需在
{}
内转义, 应将转义内容以变量表示再填入.
print(f"{'\''}")
# SyntaxError: f-string expression part cannot include a backslash
print(f'{{a}}')
# {a}
b = '\\'
print(f"{b}")
# \
五. 多行f-string
f-string可用于多行字符串
a = 'rds'
b = 'kgnb'
c = 'dynb'
s = f'''
{a}
{b}
{c}
'''
print(s)
# rds
# kgnb
# dynb
六. 自定义格式
{content:format}
设置字符串格式, content 是替换并填入字符串的内容, format 是格式描述符. 默认格式时不必指定{:format}
.
- 对齐
格式描述符 | 作用 |
---|---|
> |
左对齐(字符串默认对齐方式) |
< |
右对齐(数值默认对齐方式) |
^ |
居中 |
上述符号, 左边可指定填充字符, 右边可指定对齐长度, 例:
p = "50%"
print(f"{p:-^11}")
# ----50%----
- 数值显示
PS: 仅使用于数值类型
格式描述符 | 作用 |
---|---|
+ |
正数前加正号,负数前加负号 |
- |
正数前不加符号,负数前加负号 |
(空格) | 正数前加空格,负数前加负号 |
# |
各进制数前会分别显示0b 、0o 、0x 或0X 前缀, 需配合type类型使用 |
格式类型
格式描述符 | 作用 | 适用变量类型 |
---|---|---|
s |
普通字符串 | 字符串 |
b |
二进制整数 | 整数 |
o |
八进制整数 | 整数 |
d |
十进制整数 | 整数 |
x 或X |
十六进制整数 | 整数 |
c |
将十进制整数自动转换成对应的 Unicode 字符 | 整数 |
e 或E |
科学计数法格式 | 浮点数、复数、整数(自动转为浮点数) |
f 或F |
浮点数表示(默认小数点后6位) | 浮点数、复数、整数(自动转为浮点数) |
g 或G |
自动选用e 或f (E 或F ) |
浮点数、复数、整数(自动转为浮点数) |
% |
百分数(默认小数点后6位) | 浮点数、整数(自动转为浮点数) |
a = 10
print(f"{a:#b}")
print(f"{a:#o}")
print(f"{a:+#d}")
print(f"{a:#x}")
print(f"{a:#X}")
# 0b1010
# 0o12
# +10
# 0xa
# 0XA
- 宽度与精度
格式描述符 | 作用 |
---|---|
width |
整数width 指定宽度 |
0width |
整数width 指定宽度,0 表示高位用0补足宽度 |
width.precision |
整数 width 指定宽度,precision 指定精度 |
a = 12345
print(f"{a:6}")
print(f"{a:06}")
# 12345
# 012345
b = 3.1415
print(f"{b:.3f}")
print(f"{b:6.3f}")
print(f"{b:06.3F}")
# 3.142
# 3.142
# 03.142
- 3.8版本新功能
=
- 表达式里含等号
=
时, 输出内容包括(表达式文本、=
、求值结果)。 - 输出内容可以保留表达式中从左花括号'{'开始到
=
后的所有内容,包括空格。 - 没有指定格式时,
=
默认调用表达式的repr()
函数。指定了格式时,默认调用表达式的str()
函数,除非声明了转换字段!r
。 - 指定了转换符时,表达式求值的结果会先转换,再格式化。转换符
!s
调用 str()转换求值结果,!r
调用 repr(),!a
调用 ascii()。
line = "\tThe mill's\nclosed"
print(f'{line = }')
# line = "\tThe mill's\nclosed"
print(f'{line = :20}')
# line = The mill's
# closed
print(f'{line = !r:20}')
# line = "\tThe mill's\nclosed"
本文来自博客园,作者:青衫扶夕,转载请注明原文链接:https://www.cnblogs.com/qsswxm/p/17263280.html