你可能不知道的 3 个有用的 Python F 字符串技巧
Python 开发人员使用%运算符在 Python 中执行字符串格式化的日子已经一去不复返了。 后来一段时间,当 Python 3.0 被引入时,%运算符的常用用法逐渐被在 String 对象上调用.format()方法取代。 快进到 Python 3.6 及更高版本,引入了f-string作为将 Python 表达式嵌入字符串常量的新方法。今天,许多人已经采用了这种变化。 Python 中字符串
Python 开发人员使用%
运算符在 Python 中执行字符串格式化的日子已经一去不复返了。
后来一段时间,当 Python 3.0 被引入时,%
运算符的常用用法逐渐被在 String 对象上调用.format()
方法取代。
快进到 Python 3.6 及更高版本,引入了f-string作为将 Python 表达式嵌入字符串常量的新方法。今天,许多人已经采用了这种变化。
Python 中字符串格式化的简要概述。 (使用:carbon.now.sh)
对于不熟悉的人来说,在 Python 中使用 f-string 非常简单。只需在字符串前面加上f
或F
,然后加上单引号、双引号甚至三引号即可创建字符串,例如f"Hello, Python!"
。
虽然你们中的大多数人可能已经熟悉 Python 中的 f-string 格式化,但今天我将展示一些在 Python 3.8+ 中使用 f-string 的鲜为人知的技巧。
涵盖的主题
-
使用 f-string 进行更好的调试
-
格式化
float
小数位、货币、datetime
对象,并用 f-string 填充 -
使用 f-string 进行转换(ASCII 和
repr()
)
让我们潜入,好吗?
1.用于调试的 F 字符串
作为开发人员,我们经常发现自己使用 print 语句来调试我们的代码,仅仅是因为它们易于添加。
很有可能,我们会做这样的事情:
viewer = "🐊"
owner = "🐼"
editor = "🐓"
print(viewer)
print(owner)
print(editor)
忘记哪个值属于哪个变量的好方法。
这是我们终端上打印的输出:
🐊
🐼
🐓
老实说,使用上面的代码打印没有任何问题。
然而,当盯着一个装满其他调试器日志的终端时,人们可能很容易忘记打印出来的变量的顺序。在这样的用例中,使用 print 语句进行调试很快就会变成大海捞针。在我们的例子中:
🐊
🐼 -- Sorry, which variable does this belong to again?
🐓
在调试期间打印变量的更好方法
为了解决这个问题,我们可以做print(f’{variable_name=}’)
代替。
print(f"{viewer=}")
print(f"{owner=}")
print(f"{editor=}")
# Stdout:
# viewer = "🐊"
# owner = "🐼"
# editor = "🐓"
使用 f-string 调试打印的更清晰方法!
即使我们必须用 f-string 语法包装我们的变量,一切都变得更加清晰。现在,我们在调试过程中永远不会忘记打印变量的顺序。
此外,以这种方式使用 f-string 可以保留空格,当我们在查看令人困惑的终端日志时,这在我们的调试过程中会很有帮助。
print(f"{viewer= }")
print(f"{owner =}")
print(f"{editor = }")
# Stdout:
# viewer= '🐊'
# owner ='🐼'
# editor = '🐓'
f-string 保留空格。
祖兹 100033 * *
2.字符串格式
除了使用 f-string 进行调试之外,我最喜欢 f-string 的最大特点是它的灵活性,它允许我们轻松地格式化我们的字符串。
与普通的旧字符串连接相比,使用 f-string 更容易读取、写入和维护字符串的输出,并且具有极大的灵活性。
当我们处理float
类型变量时,可以演示最简单的示例。
如何将浮点数格式化为N个小数位
例如,假设我们需要在小数点后两位打印float
类型变量,例如,将3.1425123
转换为3.14
。不完全是一个不常见的用例,对吧?
通常,人们可能会考虑使用 Python 内置的round
方法来执行此操作。或者,您可能正在考虑使用“较旧”的str.format
方法,例如:
# The "old" ways of updating float to 2 decimal places
float_variable = 3.141592653589793
print("%.2f" % float_variable)
print("{:.2f}".format(float_variable))
# Stdout:
# 3.14
# 3.14
将浮点数限制为小数点后两位的方法。
如果我们可以使用 f-string 来代替呢?让我们再试一次!
float_variable = 3.141592653589793
print(f"{float_variable:.2f}")
# Stdout:
# 3.14
在这种情况下使用 f-string 比 str.format() 容易得多
把float变成漂亮的币值
当您处理货币时,您需要准备好字符串以尽可能方便用户使用。例如,将我们的货币值3142671.76
格式化为$3,142,671.76
可能是一个更好的主意。
在这种情况下,使用 f-string 将我们的float
值格式化为货币非常方便。我们可以通过使用,:2f
轻松做到这一点。
money = 3_142_671.76 # 💡 This is the same as 3142671.76
print(f"${money:,.2f}")
# Stdout:
# $3,142,671.76
将浮点类型变量格式化为漂亮的货币。简单的!
漂亮的格式datetime
没有strftime
除了使用它来格式化float
类型变量之外,我们甚至可以将 f-string 与datetime
类型变量一起使用。
虽然将datetime
对象格式化为更人性化的方式,例如05-July-2021
,但最常见的做法是使用datetime
对象的标准内置strftime
方法,例如datetime_var.strftime(‘%d-%b-%y’)
。
或者,我们可以使用 f-string 轻松格式化我们的datetime
变量。这是我的意思的一个例子:
from datetime import datetime
now = datetime.now()
# The usual way
formatted_datetime_now = now.strftime('%d-%B-%Y')
print(formatted_datetime_now)
# F-string way
formatted_datetime_now = f"{now:%d-%B-%Y}"
print(formatted_datetime_now)
# Stdout
# 05-July-2021
使用 f 字符串而不是
strftime
格式化datetime
变量。
用前导零或空格填充 int 变量
根据您的工作,有时您可能需要在前面填充整数,同时将其显示或用作字符串。
不必编写自定义函数来对我们的整数进行零填充,f-string 允许您对整数进行零填充而不会出汗。要填充零,只需执行以下操作:
# Output length of 20, and pad the rest with zeroes
int_variable = 1_234_567
print(f'{int_variable:020}')
# Stdout
# 00000000000001234567
# Output length of 24, and pad the rest with zeroes
int_variable = 30
print(f'{int_variable:024}')
# Stdout
# 000000000000000000000030
用前导零填充整数类型变量!
用前导空格填充整数:
# Output length of 10, and pad the rest with leading whitesplace
int_variable = 20_21
print(f'{int_variable:10d}')
# Stdout
# ' 2021'
# Output length of 5, and pad the rest with leading whitesplace
print(f"{int_variable:5d}")
# Stdout
# ' 2021'
用前导空格填充整数类型变量!
转换
在本文的最后一节中,我将为您介绍一些使用 f-string 进行转换的简短示例。当您使用感叹号语法!
,后跟 f 字符串中的变量时,它将对该变量执行额外的转换。
将您的字符串转换为 ASCII 表示
例如,您可以使用f’{your_variable!a}’
轻松打印出字符串的ASCII表示,就像这样:
owl = '🦉'
print(f'{owl!a}')
# Stdout
# '\U0001f989'
显示表情符号的 ASCII 表示。
f-string 的 repr() 替代方案
最后,另一个很好的用法! f-string 中的语法是显示包含我们对象的可打印表示的字符串,就像在 Python 中使用repr()
方法一样。
这是一个例子:
from datetime import datetime
now = datetime.now()
# Using repr()
print(repr(now))
# F-string way
print(f'{now!r}')
# Stdout
# datetime.datetime(2021, 7, 5, 13, 2, 34, 672383)
repr(now) == f'{now!r}'
# True
使用
!r
代替repr()
结束思考
自 Python 3.6 时代以来,f-string 一直是 Python 中格式化字符串的绝佳方式。在 Python 中使用 f 字符串非常容易,自从它们被引入以来我就一直在使用它们。
再加上让我们在字符串对象中包含表达式、条件甚至格式的灵活性,f-string 无疑是简单而强大的。
我个人最喜欢的是使用 f-string 来格式化datetime
对象以及格式化任何货币值。
老实说,我很高兴看到这些年来 Python 是如何发展的,逐渐使我们的开发人员体验越来越好。我希望你从这篇文章中学到了很多,并将这些技巧实际应用到你的业余项目或工作中的代码库中。
本文原发于jerrynsh.com
更多推荐
所有评论(0)