当前位置: 首页 > 面试题库 >

Python的字符串格式化的许多方式-较旧的(即将被淘汰)吗?

督冠玉
2023-03-14
问题内容

Python至少有六种格式化字符串的方式:

In [1]: world = "Earth"

# method 1a
In [2]: "Hello, %s" % world
Out[2]: 'Hello, Earth'

# method 1b
In [3]: "Hello, %(planet)s" % {"planet": world}
Out[3]: 'Hello, Earth'

# method 2a
In [4]: "Hello, {0}".format(world)
Out[4]: 'Hello, Earth'

# method 2b
In [5]: "Hello, {planet}".format(planet=world)
Out[5]: 'Hello, Earth'

# method 2c
In [6]: f"Hello, {world}"
Out[6]: 'Hello, Earth'

In [7]: from string import Template

# method 3
In [8]: Template("Hello, $planet").substitute(planet=world)
Out[8]: 'Hello, Earth'

不同方法的简要历史:

  • printf自从Python诞生以来,就一直存在样式样式的格式化
  • 该Template班是在Python 2.4中引入
  • 该format方法在Python 2.6中引入
  • f-strings是在Python 3.6中引入的

我的问题是:
- printf-style格式是否已被弃用?
- 在中Template class,该substitute方法是否已弃用或将要弃用?(我不是在谈论safe_substitute,据我所知它提供了独特的功能)

类似的问题以及为什么我认为它们不是重复的:

  • Python字符串格式:%vs.format —仅处理方法1和2,并询问哪种方法更好;我的问题明确地是关于Python Zen的弃用

  • 字符串格式选项:优点和缺点 -仅处理问题中的方法1a和1b,答案中的方法1和2,也不考虑弃用

  • 高级字符串格式与模板字符串的比较 -主要是关于方法1和3的,并且没有解决过时的问题

  • 字符串格式表达式(Python) -答案提到计划不推荐使用原始的’%’方法。但是计划要弃用,待定弃用和实际弃用之间有什么区别?而且printf-style方法甚至不会引发PendingDeprecationWarning,所以这真的会被弃用吗?该帖子也很旧,因此信息可能已过时。


问题答案:

.format()方法旨在替代旧的%格式语法。后者已经不再强调,(但没有正式弃用尚未)。方法文档指出:

字符串格式化的这种方法是在Python 3的新标准,并应首选的%格式化中所描述的字符串的格式化操作在新的代码。

(强调我的)。

为了保持向后兼容性,并让你更容易过渡,旧格式已经被留在原地现在。根据最初的PEP 3101提案:

向后兼容
可以通过保留现有机制来保持向后兼容性。新系统不会与现有字符串格式化技术的任何方法名称发生冲突,因此这两个系统可以共存,直到需要弃用旧系统为止。

请注意,直到该淘汰旧系统为止;尚未弃用,但是只要你编写新代码,都将使用新系统。

新系统的一个优点是你可以结合使用旧%格式化程序的元组和字典方法:

"{greeting}, {0}".format(world, greeting='Hello')

并且可以通过object.format()用于处理各个值格式的钩子进行扩展。

请注意,旧系统具有%和Template类,后者允许你创建添加或更改其行为的子类。新型系统具有填充相同细分市场的Formatter类别。

Python 3进一步放弃了弃用,而是在printf-style String Formatting部分中向你发出警告:

注意:此处描述的格式化操作表现出各种古怪,导致许多常见错误(例如,无法正确显示元组和字典)。使用较新的格式化字符串文字或str.format()接口有助于避免这些错误。这些替代方法还提供了更强大,灵活和可扩展的文本格式设置方法。

Python 3.6还添加了格式化的字符串文字,将表达式内联到格式字符串中。这些是使用内插值创建字符串的最快方法,因此应在str.format()任何可以使用文字的位置使用它,而不应使用它们。



 类似资料:
  • 本文向大家介绍python字符串格式化方式解析,包括了python字符串格式化方式解析的使用技巧和注意事项,需要的朋友参考一下 1.%格式符 这种格式化并不是很好,因为它很冗长并且容易导致错误,比如没有正确显示元组或字典 2.str.format() 在处理多个参数和更长的字符串时仍然可能非常冗长 3.f-Strings f-strings 是指以 f 或 F 开头的字符串,其中以 {} 包含的表

  • 主要内容:指定最小输出宽度,指定对齐方式,指定小数精度我们在《 第一个Python程序——在屏幕上输出文本》中讲到过 print() 函数的用法,这只是最简单最初级的形式,print() 还有很多高级的玩法,比如格式化输出,这就是本节要讲解的内容。 熟悉C语言 printf() 函数的读者能够轻而易举学会 Python print() 函数,它们是非常类似的。 print() 函数使用以 开头的转换说明符对各种类型的数据进行格式化输出,具体请看下表。

  • 问题内容: 我是Python新手,在格式化对象时遇到问题。 这是我要执行的操作:我有一个对象列表,并且该对象的类的成员之一是对象,它显示事件的持续时间。我想以小时:分钟的格式显示该持续时间。 我尝试了多种方法来执行此操作,但遇到了困难。我当前的方法是为返回小时和分钟的对象添加方法到类中。我可以将除以3600并四舍五入来获得小时数。我在获取剩余秒数并将其转换为分钟时遇到麻烦。 顺便说一下,我正在使用

  • 本文向大家介绍使用Template格式化Python字符串的方法,包括了使用Template格式化Python字符串的方法的使用技巧和注意事项,需要的朋友参考一下 对Python字符串,除了比较老旧的%,以及用来替换掉%的format,及在python 3.6中加入的f这三种格式化方法以外,还有可以使用Template对象来进行格式化。 from string import Template,可以

  • 问题内容: 我正在尝试格式化字符串,以便所有内容在两者之间对齐。 我正在尝试这样做: 我如何获得要排队的列?我看了文档但是很困惑。我当时以为它将使它成为30个空格,然后它将打印下一个项目,但是似乎从上一个项目结束处开始有30个空格。 谢谢 问题答案: 使您的字段在可用空间内保持对齐。使用对齐方式说明符更改对齐方式: 强制字段在可用空间内左对齐(这是大多数对象的默认设置)。 强制字段在可用空间内右对

  • 本文向大家介绍C#格式化数字字符串的方法,包括了C#格式化数字字符串的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C#格式化数字字符串的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。