你真的会用python的f-string吗

写在前面

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

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

格式化数字

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

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

  2. 十六进制转换

  3. 二进制转换

  4. 八进制转换

  5. 科学计数法

  6. 使用前导零填充数字:使用: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 又有了更深的认识,希望在以后的学习和工作中能够给你提供帮助。

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python f-string是一种在Python中进行字符串格式化的语法。它在Python 3.6及更高版本中可用。使用f字符串可以更快、更易读、更简洁且不易出错地格式化字符串。f字符串以f为前缀,并使用{}括号来评估值。在冒号后可以指定用于类型、填充或对齐的格式说明符。例如,f'{price:.3f}'中的price是变量名,.3f表示保留三位小数的精度。\[1\] 此外,f字符串还可以用于转义字符的使用。例如,使用{{}}来计算f字符串中的变量,可以使用单引号进行转义,如print(f"Python 使用 {{}} 来计算f-string中的变量")。如果想在单引号中继续使用单引号,也需要进行转义,例如print(f'你真的很\'厉害\''),输出为你真的很'厉害'。\[2\] 另外,f字符串还可以接收对象作为参数。但是,对象必须定义了__str__()或__repr__()函数。例如,定义一个User类,并在类中定义了__repr__()函数,然后创建一个User对象u,可以使用f字符串进行格式化输出,如print(f'{u}'),输出为Ace is a teacher。\[3\] #### 引用[.reference_title] - *1* *2* *3* [python 中的 f 字符串及其常见用法](https://blog.csdn.net/m0_54701273/article/details/129916943)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值