史上最易懂的f-string教程,收藏这一篇就够了

一、前言

%format 格式化后,Python 3.6 开始引入了一种效率更高的字符串格式化方式:f-string。

f-string 在形式上是以 f 修饰符引领的字符串(f''),字符串中的 {} 表明将要被替换的字段。f-string 在本质上并不是字符串常量,而是一个在运行时运算求值的表达式。

二、基本操作

f-string 中的 {} 表示将要被替换的字段,如下例

""" 三种格式化字符串方式的比较 """
name = 'raelum'
print('%s' % name)
# raelum
print('{}'.format(name))
# raelum
print(f'{name}')
# raelum

前面说过,{}实际上存放的是表达式的值,这意味着我们可以在 {} 进行运算:

name = 'raelum'
print(f'{name.upper()}')
# RAELUM
print(f'{name + name.capitalize()}')
# raelumRaelum
print(f'{name[:-1]}')
# raelu

""" 更多的例子 一"""
print(f'{2 * 3 + 5}')
# 11
print(f'{sum([i for i in range(10)])}')
# 45
print(f'{[i ** 2 for i in range(3)]}')
# [0, 1, 4]

""" 更多的例子 二"""
name = 'Li Hua'
num = 13
print(f'My name is {name}.')
# My name is Li Hua.
print(f'I have {num} apples.')
# I have 13 apples.

三、引号规范

f-string 中 {} 内使用的引号不能与 {} 外的引号定界符冲突,即如下这样的操作是不可以的:

print(f'My name is {'Li Hua'}')
# SyntaxError: f-string: expecting '}'

改为以下任何一种形式都能够正常输出(以下列举了所有可能的情况):

""" 外部定界符是单引号 """
print(f'My name is {"Li Hua"}')
print(f'My name is {"""Li Hua"""}')

""" 外部定界符是双引号 """
print(f"My name is {'Li Hua'}")
print(f"My name is {'''Li Hua'''}")

""" 外部定界符是双三引号 """
print(f"""My name is {'Li Hua'}""")
print(f"""My name is {"Li Hua"}""")
print(f"""My name is {'''Li Hua'''}""")

""" 外部定界符是单三引号 """
print(f'''My name is {'Li Hua'}''')
print(f'''My name is {"Li Hua"}''')
print(f'''My name is {"""Li Hua"""}''')

总结:如果字符串内部可能会出现多种引号但又不想操心引号问题,外部定界符直接使用 """ 就行了。

四、转义问题

f-string 不能在 {} 内使用转义,但可在 {} 外进行转义,如下:

print(f"{'\''}")
# SyntaxError: f-string expression part cannot include a backslash
print(f"\'")
# '

如果确实需要在 {} 使用转义,则应当将包含 \ 的内容单独声明为一个变量

s = '\''
print(f"{s}")
# '

五、对齐

f-string 的 {} 中采用 content:format 的方式来设置字符串格式,如要使用默认格式,则可不必指定 :format

5.1 默认使用空格填充

name = 'raelum'
print(f'{name:>20}')  # 右对齐,填充字符串长度至20
#               raelum
print(f'{name:<20}')  # 左对齐,填充字符串长度至20
# raelum              
print(f'{name:^20}')  # 居中对齐,填充字符串长度至20
#        raelum       

5.2 使用其他字符填充

name = 'raelum'
print(f'{name:a>20}')
# aaaaaaaaaaaaaaraelum
print(f'{name:1<20}')
# raelum11111111111111
print(f'{name:-^20}')
# -------raelum-------

六、宽度与精度

格式描述符作用
width整数 width 指定宽度
0width整数 width 指定宽度,0 表示高位用 0 补足宽度
width.precision整数 width 指定宽度,precision 指定精度

当给定 precision 时,width 可省略。

import numpy as np

""" 示例一 """
a = 123456
print(f'{a:4}')
# 123456
print(f'{a:8}')
#   123456
print(f'{a:08}')
# 00123456

""" 示例二 """
b = np.pi
print(f'{b:.3f}')
# 3.142
print(f'{b:8.3f}')
#    3.142
print(f'{b:08.3f}')
# 0003.142

最后

本文仅介绍了 f-string 中最常用的一些操作,如需了解更多,可前往官方文档进一步学习。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Iareges

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值