Python的f-string使用技巧

发布时间:2024年01月23日

Python很早就引入了一种称为 f-string 的字符串格式化方法,它代表格式化字符串字面值。多年过去了,f-string 也成为了python 中应用最广泛的字符串格式化方法。这比其他字符串格式化方法更快,更易读、易用,下面将介绍相关使用技巧。

1. 调试模式

首先就是 f-string 的调试功能,这可以让我们使用{variable = }代替编写"variable = ",如下面代码所示。这样可以节省大量时间和精力,并使代码看起来更整洁。

在 f-string 的调试中,还可以执行数学运算,就像在最后一行中看到的那样。

x?=?10
y?=?20

print(f"x?=?{x},?y?=?{y}")?#?原方式
print(f"{x?=?},?{y?=?}")???#?调试模式

#?math?operations
print(f"{x?*?y?=?}")

输出:

x?=?10,?y?=?20
x?=?10,?y?=?20
x?*?y?=?200

可以看到使用调试模式减少了代码量,同时输出的内容是一致的。

2.格式化数字

可以用数字进行各种格式化/转换,下面是一些示例:

  • 设置小数位数(精度):使用:.nf,其中n是小数位数

  • 十六进制转换

  • 二进制转换

  • 八进制转换

  • 科学计数法

  • 使用前导零填充数字:使用:0n,其中n是总字符数

number?=?420

#?decimal?places
#?设置精度
print(f"number:?{number:.2f}")

#?hex?conversion
#?十六进制转换
print(f"hex:?{number:#0x}")

#?binary?conversion
#?二进制转换
print(f"binary:?{number:b}")

#?octal?conversion
#?八进制转换
print(f"octal:?{number:o}")

#?scientific?notation
#?科学计数法
print(f"scientific:?{number:e}")?

#?total?number?of?characters
#?填充前导0
print(f"Number:?{number:09}")?
number:?420.00
hex:?0x1a4
binary:?110100100
octal:?644
scientific:?4.200000e+02
Number:?000000420

假设有一个像苹果市值那样大的数字,你可以使用:,,这里的逗号,就是分隔符。或者想让 f-string 打印出一个百分比值,可以使用:.2%告诉 Python 设置 2 位小数并在字符串末尾添加一个百分号。

apple_marketcap?=?2.626?*?10e12

print(f"{apple_marketcap?=?:,}")?#?comma?separator

percentage?=?10.394394

print(f"{percentage?=?:.2%}")?#?percentage

输出:

apple_marketcap?=?26,260,000,000,000.0
percentage?=?1039.44%

3.日期格式化

如果想格式化日期,可以创建一个示例日期时间值。就像在应用程序中格式化日期一样,可以在 f-string 中定义你想要的格式,例如:<date_format>

下面将一个 UTC 日期时间格式化为:

  • 没有微秒

  • 仅日期

  • 仅时间

  • 带上午/下午的时间

  • 24 小时格式

import?datetime

today?=?datetime.datetime.utcnow()
print(f"datetime?:?{today}\n")

print(f"date?time:?{today:%m/%d/%Y?%H:%M:%S}")?#?没有微秒
print(f"date:?{today:%m/%d/%Y}")?#?仅日期
print(f"time:?{today:%H:%M:%S.%f}")?#?仅时间
print(f"time:?{today:%H:%M:%S?%p}")?#?时间带上上午/下午
print(f"time:?{today:%H:%M}")?#?24小时制时间

输出:

datetime?:?2022-09-13?05:44:17.546036

date?time:?09/13/2022?05:44:17
date:?09/13/2022
time:?05:44:17.546036
time:?05:44:17?AM
time:?05:44

还可以使用格式化选项做更多事情,下面是如何从日期中获取星期几和一年中的第几天,还有计算已经过了一年的多少天。

#?Locale’s?appropriate?date?and?time?representation
print(f"locale?appropriate:?{today:%c}")

#?weekday
print(f"weekday:?{today:%A}")?#?获取当前日期是星期几

#?day?of?the?year
print(f"day?of?year:?{today:%j}")?#?获取当前日期是一年中的第几天

#?how?far?are?we?into?the?year?
day_of_year?=?f"{today:%j}"?#?获取本年度已过去时间(百分比)
print(f"progress?%?year:?{int(day_of_year)/365?*?100:.2f}%")

输出:

locale?appropriate:?Tue?Sep?13?05:44:17?2022
weekday:?Tuesday
day?of?year:?256
progress?%?year:?70.14%

4.对齐

如果你希望将变量打印在特定位置,可以使用对齐方式!

number?=?4
print(f"number?is?{number:4}")?#?width?of?10

#?numbers
for?number?in?range(1,?5):
????print(f"the?number?is?{number:{number}}")

left?=?"left?text"
center?=?"center?text!"
right?=?"right?text"

print(f"{left:>20}")?#?left?align
print(f"{center:^20}")?#?center?align
print(f"{right:<20}")?#?right?align

print(f"{left?:?<20}{center?:?^20}{right?:?>20}")

输出:

number?is????4
the?number?is?1
the?number?is??2
the?number?is???3
the?number?is????4
???????????left?text
???center?text!????
right?text??????????
left?text???????????????center?text!??????????????right?text

注意第一个 print 中的number:n。这里的n表示从单词 “is” 开始打印变量number的宽度(包括数字本身的宽度),还可以选择进行左对齐、居中对齐或右对齐。

left:>20中,打印结果共占用 20 字符,字符串靠右打印,左侧填充空格。

center:^20中,打印结果共占用 20 字符,且字符串位于中间。由于字符串 "center text!" 有 12 个字符,左右两侧各填充 4 个空白字符。

如果将三个字符串及其格式化选项放在一起,将有一个宽度为60的空间来放置左、中、右字符串变量。

综上所述,通过以上内容的介绍,相信大家对 f-string 又有了更深的认识,这会给以后的学习和工作提供帮助。

文章来源:https://blog.csdn.net/csdn1561168266/article/details/135774454
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。