写在前面
Python 在 2016 年的 3.6 版本引入了一种称为 f-string 的字符串格式化方法,它代表格式化字符串字面值。多年过去了,f-string 也成为了python 中应用最广泛的字符串格式化方法。
f-string比其他字符串格式化方法更快,更易读、易用。
以下是一些你可能不知道存在的技巧。
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
我们可以看到使用调试模式减少了代码量,同时输出的内容是一致的。
格式化数字
你可以数字进行各种格式化/转换。下面是一些示例:
-
设置小数位数(精度):使用 :.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%
日期格式化
现在,如果你想格式化日期应该怎么做呢?让我们创建一个示例日期时间值。
就像你在你的应用程序中格式化日期一样,你可以在 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
你还可以使用格式化选项做更多事情。
下面是如何从日期中获取星期几和一年中的第几天。
你还可以做一些有趣的事情,比如计算我们已经过了一年的多少天。
已经过去了 70%,时间过得真快!
# 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%
你可以在 https://strftime.org/ 找到更多的格式化选项。
Repr和Str
如果你在 Python 中编写面向对象的代码,你应该熟悉双下划线方法__repr__
和__str__
。
基本思想是:repr
:开发者友好str
:用户友好
下面是一个带有姓名和年龄属性的Person
类的示例。
对于一个类,默认情况下(没有定义str
方法),打印对象将给出repr
方法的输出。
如果定义了str
方法,你需要写!r
来告诉 Python 打印repr
方法的输出。
from dataclasses import dataclass
@dataclass
class Person:
name : str
age : int
def __str__(self) -> str:
return f"{self.name} is {self.age} years old"
Elon = Person("Elon Musk", 51)
print(f"{Elon}") # str
print(f"{Elon!r}") # repr
输出:
Elon Musk is 51 years old
Person(name='Elon Musk', age=51)
对齐
如果你希望将变量打印在特定位置,可以使用对齐方式!
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
最后,但并非最不重要的是你可以在 f-string 打印多行字符串。只需要使用三引号'''
,然后在 f-string 中定义任何你想要的内容。
下面是一个示例:
company_name = "Tesla"
employee_count = 100000
mission = "To accelerate the world's transition to sustainable energy"
print(f"""
Company: {company_name}
# of employees: {employee_count:,}
Mission: {mission}
""")
结果:
Company: Tesla
# of employees: 100,000
Mission: To accelerate the world's transition to sustainable energy
写在最后
通过以上内容的学习,相信你对 f-string 又有了更深的认识,希望在以后的学习和工作中能够给你提供帮助。
原文始发于微信公众号(harvey的网络日志):你真的会用python的f-string吗
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/188253.html