在Python如今的版本中,你居然不会f-strings字符串格式化方法?

在Python 3.6的版本中,Python提供了一种新的字符串格式化方法:f-strings,它不仅比其它的格式化方式更易读,更简洁,更不容易出错,并且它们也更快!

首先,我们先了解一下现有的字符串格式化方法。

Python 在 3.6 的这一个版本之前,字符串格式化方法主要有两种:%格式化 和 str.format()。下面我们先来简单的看一下它们的使用方法,以及局限。

1 %-格式化

% 格式化方法从 Python 刚开始的时候就存在了,堪称「一届元老」,但是 Python 官方文档中并不推荐这种格式化方式:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

1.1 如何使用 %格式化

一般的使用方式,想要插入多个变量的话,必须使用元组:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

1.2 %格式化的缺陷

上面的代码示例看起来还能读,但是,一旦开始使用多个参数和更长的字符串,你的代码将很快变得不那么容易阅读:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

可以看出,这种格式化并不是很好,因为它很冗长并且容易导致错误,比如没有正确显示元组或字典。

不过还好我们还有 str.format()。

2 str.format()

Python 2.6 中引入了 str.format() 格式化方法:

https://docs.python.org/3/library/stdtypes.html#str.format

2.1 str.format() 的使用

str.format() 是对 %格式化 的改进,它使用普通函数调用语法,并且可以通过 format() 方法为对象进行扩展。

使用 str.format() 时,替换字段用大括号进行标记:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

并且可以通过索引来以其他顺序引用变量:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

或者可以这样:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

从字典中读取数据时还可以使用 **:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

确实,str.format() 比 %格式化高级了一些,但是它还是有自己的缺陷。

2.2 str.format() 的缺陷

在处理多个参数和更长的字符串时仍然可能非常冗长,麻烦!看看这个:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

3 f-Strings

还好,现在我们有了 f-Strings,它可以使得字符串格式化更加容易。

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

下面从多个方面看下 f-strings 的使用方法,看完后,我相信你会对「人生苦短,我用 Python」有更深地赞同~

3.1 f-Strings 使用方法

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

是不是很简洁?!还有更牛叉的!

因为 f-strings 是在运行时计算的,那么这就意味着你可以在其中放置任意合法的 Python 表达式,比如:

  • 运算表达式
在Python如今的版本中,你居然不会f-strings字符串格式化方法?
  • 调用函数

还可以调用函数:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

也可以直接调用内置函数:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?
  • 在类中使用
在Python如今的版本中,你居然不会f-strings字符串格式化方法?
在Python如今的版本中,你居然不会f-strings字符串格式化方法?
  • 多行 f-string
在Python如今的版本中,你居然不会f-strings字符串格式化方法?

这里需要注意,每行都要加上 f 前缀,否则格式化会不起作用:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

4 速度对比

其实,f-string 里的 f 也许可以代表 fast,它比 %格式化方法和 str.format() 都要快:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

运行结果:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

很明显,f-string 是最快的,并且语法是最简洁的,是不是迫不及待地要试试了?

5 注意事项

5.1 引号的处理

可以在字符串中使用各种引号,只要保证和外部的引号不重复即可。

以下使用方式都是没问题的:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

那如果字符串内部的引号和外部的引号相同时呢?那就需要 进行转义:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

5.2 括号的处理

若字符串中包含括号 {},那么你就需要用双括号包裹它:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

可以看出,使用三个括号包裹效果一样。

当然,你可以继续增加括号数目,看下有什么其他效果:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

额,那么多括号,看着有点晕了...

5.3 反斜杠

上面说了,可以用反斜杠进行转义字符,但是不能在 f-string 表达式中使用:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

你可以先在变量里处理好待转义的字符,然后在表达式中引用变量:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

5.4 注释符号

不能在表达式中出现 #,否则会报出异常;

在Python如今的版本中,你居然不会f-strings字符串格式化方法?

总结

经过以上的讲解,是不是发现 f-string 非常简洁实用、可读性高,并且不容易出错,大家可以尝试切换到 f-string 哦

f-string 也体现出了 Python 的奥义:

在Python如今的版本中,你居然不会f-strings字符串格式化方法?
在Python如今的版本中,你居然不会f-strings字符串格式化方法?
在Python如今的版本中,你居然不会f-strings字符串格式化方法?
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 3,078评论 0 7
  • 你收到过很多难听的话,有的是在讽刺你,有的是在挖苦你,那时的你不知道这些话是不是在故意为难你,你不知道该不该回应,...
    左一安阅读 127评论 0 1
  • 2015年,我的人生在经历了20多年的学校桎梏后,第一次看到了外面的世界。毕业后,不甘平凡的我选择了一线城市,成为...
    1191196729b5阅读 325评论 0 1
  • 初闻不知曲中意,再听已是曲中人 你陪我步入蝉响 越过城市喧嚣 歌声还在流转 你榴花般的双眸 不见你的温柔 丢失花间...
    加糖的咸鱼阅读 366评论 0 0
  • React是灵活的并且能被用在很多项目之中。你能用它新建一个项目,但是你也能逐步的把它当成一个不需要重写的代码库。...
    jdkwky阅读 445评论 0 0