为什么Python中有这么多的格式化风格?

时间:2018-03-10 14:43:50

标签: python python-3.x string-formatting

我最近观看了一个Python教程,其中作者一直在处理各种Python字符串格式表达式,我对此感到震惊:

为什么Python中有这么多的字符串格式?

  • 有基于C语言printf的方法(顺便提一下,在各种来源中被引用为已弃用并计划删除,但在标准Python文档(!)中有大量示例)。
  • 另一方面,C#派生.format()处理字符串的方式。
  • 最后,截至Python 3.6的出现,我们获得了formatted f-string literal,称为f-string
  • 有些还包括string模块,但这似乎对我来说太过分了。

当我发现here时,前两种上述技术会有所不同并相互重叠,具体视使用情况而定。

最后但并非最不重要的是,这种方法的富裕程度与import this的Python声明之一是否相矛盾?

  

应该有一个 - 最好只有一个 - 显而易见的方法。

如果我错了,请纠正我,但这在某种程度上本身就是“非Pythonic”。

读者是否会就此提出自己的想法,最好还是提供一些相关的例子?

2 个答案:

答案 0 :(得分:2)

这就是进化的样子。

  

"我们需要字符串连接"。

不确定。 "hello" + ''' ''' + 'world'或者,如果您愿意,' '.join(['hello', 'world'])

  

"但是"found " + str(var) + " matches"有点笨拙。我听说Lisp有princ ......?"

哦,好的,这里:'found %i matches' % var

(......时间过去了......)

  

"我听说你正在改造整个语言并将print变成一个函数。喘气!我们还可以修复这个字符串格式化的东西,毕竟它真的很疯狂吗?当你插入多个变量时,新手不明白你为什么需要括号,实际上,覆盖字符串的模运算符是一件非常古怪的事情。"

嗯,你是对的,好的,在这里。 'found {0} matches'.format(var)是的,让我们摆脱那种不直观的复杂性。我们不希望模数成为特殊情况,它不够优雅。

  

"感谢。但是......等等,有很多代码使用旧语法,当你比较它们时,新语法真的很笨拙。"

哎呀。我们可以减少笨拙。有一些语法糖! f'found {var} matches'还有更多来自哪里!

  

"嗯,我不知道。模数仍然更容易输入。"

你让我疯了。好的,如果你愿意,你可以玩它。但不要说我没有警告过你。

答案 1 :(得分:-2)

https://docs.python.org/2/whatsnew/2.6.html#pep-3101-advanced-string-formatting

看起来它是关于使字符串格式化功能更强大。

从上面的链接: “在Python 3.0中,%运算符由更强大的强大的字符串格式化方法format()补充。对str.format()方法的支持已经被反向移植到Python 2.6。”