Python的f-string使用技巧

 更新时间:2024年01月29日 09:51:17   作者:python慕遥  
Python很早就引入了一种称为 f-string 的字符串格式化方法,它代表格式化字符串字面值,本文主要介绍了Python的f-string使用技巧,具有一定的参考价值,感兴趣的可以了解一下

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的空间来放置左、中、右字符串变量。

5.f-string中引号使用存在的问题

① f-string大括号内使用的引号不能和大括号外的引号定界符引号冲突,需根据情况灵活切换使用单引号、双引号、单三引号、双三引号。

>>> f'I am {"Huang Wei"}'
'I am Huang Wei'

>>> f'''I am {'Huang Wei'}'''
'I am Huang Wei'

>>> f"""I am {'Huang Wei'}"""
'I am Huang Wei'

>>> f"""I am {"Huang Wei"}"""
'I am Huang Wei'

>>> f'I am {'Huang Wei'}'
  File "<stdin>", line 1
    f'I am {'Huang Wei'}'
                 ^
SyntaxError: invalid syntax

注意:只要大括号内外的引号不同,就没有问题。但是大括号中只能是但引号和 双引号 ,大括号外的引号定界符引号可以使用单引号、双引号、单三引号、双三引号。

② 大括号外的引号还可以使用\转义,但大括号内不能使用\转义。

>>> f"he\'ll go to {'shang hai'}"
"he'll go to shang hai"

>>> f"""he introduces himself {"I\'m Tom"}"""
  File "<stdin>", line 1
SyntaxError: f-string expression part cannot include a backslash

>>> f"""he introduces himself {"I'm Tom"}"""
"he introduces himself I'm Tom"

 f-string中大括号使用存在的问题

① f-string大括号外如果需要显示大括号,则应输入连续两个大括号{{ }};大括号内需要引号,使用引号即可。

>>> f"5{'{apples}'}"
'5{apples}'

>>> f"{{5}}{'apples'}"
'{5}apples'

到此这篇关于Python的f-string使用技巧的文章就介绍到这了,更多相关Python f-string内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 序列化Python对象的方法

    序列化Python对象的方法

    这篇文章主要介绍了序列化Python对象的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • Python(Tornado)模拟登录小米抢手机

    Python(Tornado)模拟登录小米抢手机

    用Python(Tornado)模拟登录小米帐号,抢小米手机
    2013-11-11
  • 分析语音数据增强及python实现

    分析语音数据增强及python实现

    数据增强是一种生成合成数据的方法,即通过调整原始样本来创建新样本。这样我们就可获得大量的数据。这不仅增加了数据集的大小,还提供了单个样本的多个变体,这有助于我们的机器学习模型避免过度拟合
    2021-06-06
  • python性能测量工具cProfile使用解析

    python性能测量工具cProfile使用解析

    这篇文章主要介绍了python性能测量工具cProfile使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python基础之文件操作及光标移动详解

    Python基础之文件操作及光标移动详解

    这篇文章主要为大家介绍了Python基础之文件操作及光标移动详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • python自动化测试无法启动谷歌浏览器问题

    python自动化测试无法启动谷歌浏览器问题

    这篇文章主要介绍了python自动化测试无法启动谷歌浏览器问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • Python list列表查找元素详情

    Python list列表查找元素详情

    这篇文章主要介绍了Python list列表查找元素详情,Python 列表(list)提供了 index和count方法,它们都可以用来查找元素,文章围绕主题的相关资料展开详细的内容介绍,具有一定的参考价价值,需要的朋友可以参考一下
    2022-06-06
  • 如何使用Python JSON解析和转换数据

    如何使用Python JSON解析和转换数据

    JSON 是文本,使用 JavaScript 对象表示法编写,Python 有一个内置的 json 包,可用于处理 JSON 数据,本文给大家介绍使用Python JSON解析和转换数据的方法,感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • pandas中数据的排序与排名的具体使用

    pandas中数据的排序与排名的具体使用

    Pandas对数据进行排序和排名是非常常见的操作,本文主要介绍了pandas中数据的排序与排名的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • 微信跳一跳python代码实现

    微信跳一跳python代码实现

    这篇文章主要为大家详细介绍了微信跳一跳python代码实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01

最新评论