返回顶部
首页 > 资讯 > 后端开发 > Python >为什么 Python 中的 f-string 可以连接字符串与数字
  • 207
分享到

为什么 Python 中的 f-string 可以连接字符串与数字

2023-06-15 17:06:57 207人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要讲解了“为什么 python 中的 f-string 可以连接字符串与数字”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么 Python 中的 f-string 可以连接字符

这篇文章主要讲解了“为什么 python 中的 f-string 可以连接字符串与数字”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么 Python 中的 f-string 可以连接字符串与数字”吧!

毫无疑问,Python 是一门强类型语言。强类型语言。强类型语言!

这就意味着,不同类型的对象通常需要先做显式地类型转化, 然后才能进行某些操作。

下面以字符串和数字为例,看看强行操作会产生什么结果:

>>> "Python猫" + 666 Traceback (most recent call last):   File "<stdin>", line 1, in <module> TypeError: can only concatenate str (not "int") to str

它报类型错误了(TypeError),说字符串只能连接(concatenate)字符串,不能连接 int 类型。 这正是强类型语言的基本约束。

但是,如果我们先把数字“转化”成字符串类型,再执行“+”操作,就不会报错了:

>>> "Python猫" + str(666) 'Python猫666'

上面的这个例子,对读者们来说,应该并不难理解。

由此,我们要引出一个问题:如何在不作显式类型转化的情况下,进行字符串与数字类型的拼接呢?

在《详解Python拼接字符串的七种方式》这篇文章中,它梳理了七种拼接字符串的写法,我们可以逐个来试验一下。

几种字符串拼接方式:

格式化类:%、fORMat()、template

拼接类:+、()、join()

插值类:f-string

为了节省篇幅,此处直接把可以顺利拼接的 4 种写法罗列如下:

>>> "%s %d" % ("Python猫", 666) 'Python猫 666'  >>> from string import Template >>> s = Template('${s1}${s2}') >>> s.safe_substitute(s1='Python猫',s2=666) 'Python猫666'  >>> "Python猫{}".format(666) 'Python猫666'  >>> num = 666 >>> f"Python猫{num}" 'Python猫666'

第一种写法(即 % 格式化)来自古老的 C 语言,其中的“%d”是一个占位符,表示它将要接收一个整数,并格式化成字符串。

第二和第三种写法,它们是第一种写法的升级版,不同的是,它们的占位符是通用型的,不必指定“%s”、“%d”等等明确的类型。这两种写法中,数字类型的参数被传给特定的格式化方法(即  safe_substitute 与 format),在这些方法的内部,它们会作类型转化处理。

可以说,上述三种写法都不难理解,它们的意图都有迹可循。

但是,现在再看看最后一种写法,也就是 f-string 写法,似乎就不是那么明显了。

首先,在字符串内部,它并没有像“%格式化”那样指定占位符的类型;其次,所要拼接的数字并没有作为任何函数的参数来传递。

也就是说,在明面上根本看不出任何要作类型转化的意图。但是,由于我们已知 Python  是强类型语言,已知数字类型绝对不可能直接拼接到字符串里,因此,只能说明 f-string 语法在底层作了某种类型转化的操作!

那么,我们就可以再提出一个新的问题:f-string 语法在处理字符串与数字时,是如何实现数字的类型转化的呢?

也许有的读者会猜想它是调用了内置的 str() 或 repr()(或它们对应的魔术方法__str__() 与  __repr__()),从而实现类型转化,但是,答案并没有如此简单!

f-string 语法是在 Python 3.6 版本引入的。为了省事,我们直接找到 PEP-498 文档,在里面查阅看是否有关于实现原理的线索。

为什么 Python 中的 f-string 可以连接字符串与数字

文档地址:https://www.python.org/dev/peps/pep-0498

PEP 里提到f-string 的语法格式是这样的:

f'<text> { <expression> <optional !s, !r, or !a> <optional : format specifier> } <text> ...'

其中,花括号里的内容就是要作格式化的内容,除去可选的“optional”部分后,“expression”部分就是真正要处理的内容。对应前文的例子,数字  666 就是一个 expression。

expression 会按 __format__ 协议进行格式化,但是并不会直接调用 __format__() 这个方法。

文档上指出,实际的执行过程等效于type(value).__format__(value, format_spec)或者 format(value,  format_spec) 。

事实上,字符串对象的 foramt() 方法跟 Python 内置的 foramt() 函数,它们都会调用__format__()  魔术方法,所以,f-string 其实是前文中 format() 格式化写法的升级版。

在默认情况下,format_spec 是一个空字符串,而format(value, "") 的效果等同于str(value) ,因此,在不指定其它  format_spec 的情况下,可以简单地认为 f-string 就是调用了 str() 来作的类型转化&hellip;&hellip;

至此,我们看到了 f-string 的实现原理,明白了它在拼接字符串与数字时,效果等效于前文的 format() 格式化方法,也等效于使用 str()  进行类型转化。

感谢各位的阅读,以上就是“为什么 Python 中的 f-string 可以连接字符串与数字”的内容了,经过本文的学习后,相信大家对为什么 Python 中的 f-string 可以连接字符串与数字这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 为什么 Python 中的 f-string 可以连接字符串与数字

本文链接: https://lsjlt.com/news/281007.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 为什么 Python 中的 f-string 可以连接字符串与数字
    这篇文章主要讲解了“为什么 Python 中的 f-string 可以连接字符串与数字”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么 Python 中的 f-string 可以连接字符...
    99+
    2023-06-15
  • 为什么可以Python中使用f-string 连接字符串与数字
    本篇文章为大家展示了为什么可以Python中使用f-string 连接字符串与数字,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。下面以字符串和数字为例,看看强行操作会产生什么结果:>>&...
    99+
    2023-06-06
  • python怎么用f-string来连接字符串
    这篇文章主要为大家展示了“python怎么用f-string来连接字符串”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python怎么用f-string来连接字...
    99+
    2024-04-02
  • 详细解读Python字符串的使用与f-string
    目录Python字符串介绍创建多行字符串连接 Python 字符串访问字符串元素获取字符串的长度切片字符串Python 字符串是不可变的概括Python字符串介绍 字符串是一系列字符...
    99+
    2023-05-14
    详解Python Python字符串 Python字符串f-string
  • Python字符串的使用与f-string源码分析
    这篇文章主要介绍了Python字符串的使用与f-string源码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python字符串的使用与f-string源码分析文章都会有所收获,下面我们一起来看看吧。Pyt...
    99+
    2023-07-05
  • 为什么不在Python中使用+来连接字符串
    本篇内容主要讲解“为什么不在Python中使用+来连接字符串”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“为什么不在Python中使用+来连接字符串”吧!开始作为一名初学者,或者刚从使用“+”连...
    99+
    2023-06-16
  • python中使用什么函数可以检测字符串中是否包含字符串
    python中检测字符串中是否包含字符串的方法:在python中可以使用index()函数方法检测字符串中是否包含字符串;该函数方法与python中的find()函数方法一样,只不过如果子字符串不在string中会报异常。具体内容如下:in...
    99+
    2024-04-02
  • oracle中字符串用什么连接
    oracle 中连接字符串有五种方式:1. 加号 (+) 运算符;2. concat 函数;3. || 运算符(oracle 12c 及更高版本);4. dbms_lob.concat ...
    99+
    2024-05-07
    oracle
  • python连接字符串的方法是什么
    在Python中,可以使用加号(+)运算符来连接字符串。例如: str1 = "Hello" str2 = "World" resu...
    99+
    2023-10-23
    python
  • oracle中字符串用什么符号连接
    oracle 中连接字符串的符号是加号 (+)。使用方法是将字符串用加号连接起来,如 'hello' || ' world'。嵌套加号可用于连接多个字符串。concat() 函...
    99+
    2024-05-07
    oracle
  • sql中字符串连接符号是什么
    sql 中的字符串连接符号是两个竖线(||),用于连接两个字符串,连接结果为字符串的拼接。 SQL 中的字符串连接符号 SQL 中用于连接字符串的符号是两个竖线(||)。这个符号表示将...
    99+
    2024-05-08
  • Python字符串的拆分与连接详解
    目录拆分字符串无参数拆分指定分隔符使用 Maxsplit 限制拆分连接和连接字符串与+运算符连接在 Python 中从列表到字符串 .join()生活中几乎没有什么保证:死亡、税收和...
    99+
    2024-04-02
  • python如何连接可迭代对象中的字符串
    这篇文章主要介绍python如何连接可迭代对象中的字符串,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!连接可迭代对象中的字符串在处理字符串时,有时需要通过连接列表、元组等可迭代对象内的一系列字符串来创建单个字符串。这...
    99+
    2023-06-27
  • JavaScript中怎么用String()把数字转换为字符串
    今天小编给大家分享一下JavaScript中怎么用String()把数字转换为字符串的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文...
    99+
    2024-04-02
  • oracle中字符串用什么符号连接数据库
    oracle使用“||”符号连接字符串。使用方法如下:将要连接的字符串用“||”符号连接起来;字符串连接的优先级较低,需要使用括号来保证优先级;空字符串连接后仍为一个空字符串;null值...
    99+
    2024-05-08
    oracle
  • php怎么将数组转换为以逗号分隔符连接的字符串
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php将数组转换为以逗号分隔符连接的字符串在php中,可以利用implode()来将数组转换为字符串。implode() 函数可以将一个一维数组转化为字符串,其语法格式...
    99+
    2021-01-01
    php 数组转字符串 implode()
  • python字符串转化为数字的方法是什么
    Python中可以使用`int()`函数将字符串转化为整数。例如:```pythonnum_str = "123"num = int...
    99+
    2023-09-25
    python
  • Python中怎么将字符串转换为数字
    可以使用int()函数将字符串转换为整数,使用float()函数将字符串转换为浮点数。示例代码如下:```python# 将字符串转...
    99+
    2023-10-11
    python
  • Python中怎么格式化数字为字符串
    在Python中,可以使用format()方法或者f-string来格式化数字为字符串。 使用format()方法: num =...
    99+
    2024-04-03
    Python
  • php中连接两个字符串的符号是什么
    php 中连接两个字符串的符号是 .(点号),它可用于连接字符串、变量和表达式。需要注意,连接符具有左结合性,可以连接多种数据类型,但需要进行类型转换。 PHP 中连接两个字符串的符号...
    99+
    2024-04-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作