当前位置:首页 > 科技  > 软件

Python必知必会:15个令人相见恨晚的Python字符串格式化技巧!

来源: 责编: 时间:2024-09-10 09:50:17 231观看
导读前路漫漫,我爱Python!Hello,大家好,Python是一门简单易学且很有意思的语言,每天我都用它来帮我处理很多繁琐且复杂的工作,提升工作效率。字符串是最常用的数据类型之一,今天,我将向大家分享15个令人相见恨晚的Python字符串格

前路漫漫,我爱Python!Hello,大家好,Python是一门简单易学且很有意思的语言,每天我都用它来帮我处理很多繁琐且复杂的工作,提升工作效率。字符串是最常用的数据类型之一,今天,我将向大家分享15个令人相见恨晚的Python字符串格式化技巧,帮你写出更高效、优雅且Pythonic的代码。poD28资讯网——每日最新资讯28at.com

poD28资讯网——每日最新资讯28at.com

1.f'{variabe=}'

如果我们在f-字符串中的变量后添加 = 符号,它会同时打印变量名称和值。poD28资讯网——每日最新资讯28at.com

name: str = 'Jack'age: int = 21city: str = 'New York'print(f'{name=} {age=} {city=}')# name='Jack' age=21 city='New York'

这个技巧对于代码调试和日志记录非常有用。poD28资讯网——每日最新资讯28at.com

2. 四舍五入到小数点后N位

要将数值四舍五入到小数点后N位,可以简单使用 {number:.Nf} 的形式(N为具体数字):poD28资讯网——每日最新资讯28at.com

PI: float = 3.141592653589793print(f'{PI:.2f}')print(f'{PI:.3f}')print(f'{PI:.4f}')

3. 四舍五入到 N 个有效数字

要将数值四舍五入到N位有效数字,可以简单使用 {number:.Ng} 的形式(N为具体数字):poD28资讯网——每日最新资讯28at.com

number: int = 131452print(f'{number:.2g}')  # 1.3e+05print(f'{number:.3g}')  # 1.31e+05print(f'{number:.4g}')  # 1.315e+05x: float = 0.0131452print(f'{x:.2g}')   # 0.013print(f'{x:.3g}')   # 0.0131print(f'{x:.4g}')   # 0.01315

4. 格式化原始字符串

原始字符串就是转义字符(/)不再转义其他字符,而只是原本的反斜杠。在字符串前添加 f 就可格式化字符串,在字符串前添加 r 就可让字符串仅表示原始含义。要使字符串既是格式化字符串又是原始字符串,只需在字符串前面添加 fr 或 rf,二者皆可。poD28资讯网——每日最新资讯28at.com

name: str = 'Jack'age: int = 20print(fr'{name=} /n {age=}')  # name='Jack' /n age=20print(rf'{name=} /n {age=}')  # name='Jack' /n age=20

5. 使用空格对齐

可以通过 <N, >N 和 ^N 实现字符串的左、右和居中对齐,N 表示填充后的字符串宽度(默认用空格填充):poD28资讯网——每日最新资讯28at.com

fruit: str = 'banana'print(f'[{fruit:<20}]') # [banana              ]print(f'[{fruit:>20}]') # [              banana]print(f'[{fruit:^20}]') # [       banana       ]

注意,如果 fruit 的长度大于20,则会被截断。poD28资讯网——每日最新资讯28at.com

6. 使用其他字符对齐

在上面的对齐方式中,默认使用空格填充。实际上,我们可以按自己的意愿指定其他填充字符,比如:poD28资讯网——每日最新资讯28at.com

fruit: str = 'banana'print(f'[{fruit:#<20}]') # [banana##############]print(f'[{fruit:=>20}]') # [==============banana]print(f'[{fruit:*^20}]') # [*******banana*******]

7. f-字符串中单双引号的使用

在旧版本的Python(<Python 3.12)中,f-字符串的内外引号形式必须刚好相反,比如,外部为双引号,则内部须为单引号,反之亦然。如果内外引号形式相同则会发生语法错误。poD28资讯网——每日最新资讯28at.com

person_info: dict = {'name': 'Jack', 'age': 25}print(f'Name: {person_info["name"]}; Age: {person_info["age"]}')# Name: Jack; Age: 25print(f"Name: {person_info['name']}; Age: {person_info['age']}")# Name: Jack; Age: 25# print(f"Name: {person_info["name"]}; Age: {person_info["age"]}")# SyntaxError: f-string: unmatched '['

但是如果Python版本在3.12及以上,则f-字符串的内外引号形式可以相同,比如:poD28资讯网——每日最新资讯28at.com

print(f"Name: {person_info["name"]}; Age: {person_info["age"]}")# Name: Jack; Age: 25print(f'Name: {person_info['name']}; Age: {person_info['age']}')# Name: Jack; Age: 25

8. 大数字格式化—插入千分位符

我们可以在f-字符串中插入千分位符(逗号),增加代码的可读性,语法形式为:{number:,}。poD28资讯网——每日最新资讯28at.com

number: int = 10000000000print(f'{number:,}')    # 10,000,000,000

9. 展示原始输出

在f-字符串中的变量后添加 !r 可以让我们展示原始输出,作用相当于 repr(variable):poD28资讯网——每日最新资讯28at.com

name: str = 'Jackzhang'print(f'raw output: {repr(name)}')# raw output: 'Jackzhang'print(f'raw output: {name!r}')# raw output: 'Jackzhang'

这个技巧在代码调试和日志记录的场景中会比较有用。poD28资讯网——每日最新资讯28at.com

10. 日期时间格式化

在f-字符串中,我们还可以轻松实现日期时间的格式化,格式化代码如下:poD28资讯网——每日最新资讯28at.com

  • %Y:表示完整年份,如 2024
  • %y:表示截断的年份,如 24
  • %m:将月份表示为数字
  • %d:将天表示为数字
  • %A:表示星期几(全称),如 Monday, Tuesday, ...
  • %a:表示星期几(简称),如 Mon, Tue, ...
from datetime import datetimeddate: datetime = datetime.now()print(f'{ddate: %Y-%m-%d}')     # 2024-09-05print(f'{ddate: %y/%m/%d}')     # 24/09/05print(f'{ddate: %d/%m/%y %A}')  # 05/09/24 Thursdayprint(f'{ddate: %Y-%m-%d %a}')  # 05/09/24 Thu

其他更多格式化代码可以参考:https://docs.python.org/3/library/datetime.html#format-codespoD28资讯网——每日最新资讯28at.com

11. 浮点数转化百分比

我们也可以通过f-字符串直接将数字转换百分比,并且指定百分比中的小数位。poD28资讯网——每日最新资讯28at.com

print(f'{0.25:.0%}')    # 25%print(f'{0.5:.1%}')     # 50.0%print(f'{0.75:.2%}')    # 75.00%print(f'{1.25:.3%}')    # 125.000%

12. 二、八及十六进制数字展示

在f-字符串中,我们也可以将数字表示为二进制、八进制和十六进制。poD28资讯网——每日最新资讯28at.com

  • number:b:以二进制表示数字
  • number:o:以八进制表示数字
  • number:x:以十六进制表示数字
a, b, c = 4, 16, 128print(f'binary={a:b} octal={a:o} hexadecimal={a:x}')# binary=100 octal=4 hexadecimal=4print(f'binary={b:b} octal={b:o} hexadecimal={b:x}')# binary=10000 octal=20 hexadecimal=10print(f'binary={c:b} octal={c:o} hexadecimal={c:x}')# binary=10000000 octal=200 hexadecimal=80

13. 三引号f-字符串

三引号字符串可跨越多行,并且输出与输入完全一致(包括位置、缩进等)。poD28资讯网——每日最新资讯28at.com

person_info: dict = {    'name': 'Jackzhang',    'age': 25,    'gender': 'Male',    'city': 'San Francisco',}msg: str = f'''name: {person_info.get('name')}age: {person_info.get('age')}gender: {person_info.get('gender')}city: {person_info.get('city')}'''print(msg)

poD28资讯网——每日最新资讯28at.com

14. 带有位置参数的format()

f-字符串的其中一个局限就是,我们无法将其用作模板字符串,将其存储在数据库中。poD28资讯网——每日最新资讯28at.com

为了能够在数据库中存储这样的模板字符串供我们多次调用,可以这样做:poD28资讯网——每日最新资讯28at.com

person_info: dict = {    'name': 'Jackzhang',    'gender': 'Male',}temp_s: str = 'my name is {} and my gender is {}'print(temp_s.format(person_info['name'], person_info['gender']))# my name is Jackzhang and my gender is Male

请注意,第一个参数名称分配给第一个花括号,而第二个参数年龄分配给第二个花括号。如果有更多括号,以此类推。poD28资讯网——每日最新资讯28at.com

15. 带有关键字参数的format()

将 .format() 与位置参数一起使用的限制之一是参数必须严格遵循特定的顺序。为了克服这个限制,我们可以改用关键字参数。关键是我们现在需要将变量名称添加到字符串中,如下所示:poD28资讯网——每日最新资讯28at.com

person_info: dict = {    'name': 'Jackzhang',    'gender': 'Male',}temp_s: str = 'my name is {name} and my gender is {gender}'print(temp_s.format(name=person_info['name'],                     gender=person_info['gender']))# my name is Jackzhang and my gender is Maleprint(temp_s.format(gender=person_info['gender'],                     name=person_info['name']))# my name is Jackzhang and my gender is Male

从上面的代码片段中我们可以看出,采用关键字参数引用后,即使改变参数顺序,仍然可以获得相同的结果。poD28资讯网——每日最新资讯28at.com

结论

感谢你的阅读,希望今天的文章对你有所帮助,可以让你学到一些Python字符串格式化的新知识、新技巧。poD28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-112763-0.htmlPython必知必会:15个令人相见恨晚的Python字符串格式化技巧!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 在ASP.NET Core中实现防抖功能:利用分布式锁确保操作唯一性

下一篇: 不同业务使用同一个线程池发生死锁

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 六大权益!华为8月服务日开启:手机免费贴膜、维修免人工费

    8月5日消息,一年一度的华为开发者大会2023(Together)日前在松山湖拉开帷幕,与此同时,华为8月服务日也式开启,到店可享六大专属权益。华为用户可在华为商城Ap
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 这款新兴工具平台,让你的电脑效率翻倍

    随着信息技术的发展,我们获取信息的渠道越来越多,但是处理信息的效率却成为一个瓶颈。于是各种工具应运而生,都在争相解决我们的工作效率问题。今天我要给大家介绍一款效率
  • Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 中国家电海外掘金正当时|出海专题

    作者|吴南南编辑|胡展嘉运营|陈佳慧出品|零态LT(ID:LingTai_LT)2023年,出海市场战况空前,中国创业者在海外纷纷摩拳擦掌,以期能够把中国的商业模式、创业理念、战略打法输出海外,他们依
  • 华为HarmonyOS 4升级计划公布:首批34款机型今日开启公测

    8月4日消息,今天下午华为正式发布了HarmonyOS 4系统,在更流畅的前提下,还带来了不少新功能,UI设计也有变化,会让手机焕然一新。华为宣布,首批机型将会在
Top