字符串格式化f-string用法

字符串格式化f-string用法

一. 前言

f-string——格式化字符串常量(formatted string literals), Python3.6新引入的一种字符串格式化方法.

  • 形式上是以fF修饰符引领的字符串(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: 仅使用于数值类型

格式描述符 作用
+ 正数前加正号,负数前加负号
- 正数前不加符号,负数前加负号
(空格) 正数前加空格,负数前加负号
# 各进制数前会分别显示0b0o0x0X前缀, 需配合type类型使用

格式类型

格式描述符 作用 适用变量类型
s 普通字符串 字符串
b 二进制整数 整数
o 八进制整数 整数
d 十进制整数 整数
xX 十六进制整数 整数
c 将十进制整数自动转换成对应的 Unicode 字符 整数
eE 科学计数法格式 浮点数、复数、整数(自动转为浮点数)
fF 浮点数表示(默认小数点后6位) 浮点数、复数、整数(自动转为浮点数)
gG 自动选用efEF 浮点数、复数、整数(自动转为浮点数)
% 百分数(默认小数点后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版本新功能=
  1. 表达式里含等号=时, 输出内容包括(表达式文本、= 、求值结果)。
  2. 输出内容可以保留表达式中从左花括号'{'开始到=后的所有内容,包括空格。
  3. 没有指定格式时,=默认调用表达式的repr()函数。指定了格式时,默认调用表达式的str()函数,除非声明了转换字段!r
  4. 指定了转换符时,表达式求值的结果会先转换,再格式化。转换符!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"

参考链接:
Python格式化字符串f-string常用用法
2.4.3. 格式字符串字面值

posted @   青衫扶夕  阅读(292)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示