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

为什么Python中有这么多格式化风格?,python,python-3.x,string-formatting,Python,Python 3.x,String Formatting,我最近观看了一个Python教程,其中作者一直在处理各种Python字符串格式表达式,我被一个想法打动了: 为什么Python中有这么多字符串格式风格 有一种基于C语言printf的方法(顺便说一句,在各种来源中,它被认为是不推荐的,并计划删除,但在标准Python文档(!)中有大量的例子) 另一方面,还有处理字符串的C#派生.format()方法 最后,随着Python3.6的出现,我们得到了格式的f-string literal,称为f-string 有些还包括string模块,但对我来说

我最近观看了一个Python教程,其中作者一直在处理各种Python字符串格式表达式,我被一个想法打动了:

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

  • 有一种基于C语言
    printf
    的方法(顺便说一句,在各种来源中,它被认为是不推荐的,并计划删除,但在标准Python文档(!)中有大量的例子)
  • 另一方面,还有处理字符串的
    C#
    派生
    .format()
    方法
  • 最后,随着Python3.6的出现,我们得到了
    格式的f-string literal
    ,称为
    f-string
  • 有些还包括
    string
    模块,但对我来说,这似乎有些过分
正如我发现的,前面提到的前两种技术都是不同的,并且相互重叠,这取决于使用情况

最后但并非最不重要的一点是,这种方法的丰富性是否与来自导入此的Python声明相矛盾

应该有一个——最好只有一个——显而易见的方法来做到这一点

如果我错了,请纠正我,但这在某种程度上本质上是“非蟒蛇式的”

读者是否会提供他们对此的想法,最好有一些相关的例子作为佐证?

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

从上面的链接:
“在Python3.0中,%运算符由一个更强大的字符串格式化方法format()补充。对str.format()方法的支持已经被后传到Python2.6中。”

这就是演化的样子

“我们需要字符串连接”

当然<代码>“你好”+“+”世界“或者,如果你愿意,
”。加入(['hello',world')

“但是
“找到”+str(var)+“匹配”
有点笨拙。我听说Lisp有
原则
?”

哦,好的,这里:
“找到了%i个匹配项”%var

(…时间流逝…)

“我听说您正在对整个语言进行彻底的修改,并将
print
变成一个函数。喘息我们能不能也解决这个字符串格式的问题,毕竟这很疯狂?新手不明白为什么在插入多个变量时需要括号,实际上,重写字符串的模运算符是一件非常奇怪的事情。”

嗯,你说得对,好吧,这里。
找到了{0}个匹配项。格式(var)
是的,让我们摆脱这种不直观的复杂性。我们不希望模是一个特例,它是不雅观的

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

啊。我们可以让它不那么笨拙。有一些语法糖!
f'found{var}matches'
,还有更多的东西来自哪里

“嗯,我不知道。模更容易输入。”


你快把我逼疯了。好吧,如果你愿意,你可以玩它。但不要说我没有警告你。

这是一种进化。旧的方法被认为是不合适的,所以新的方法被发明了。Python咒语不应该禁止进步和改进。
prinf
是如此不受欢迎,我从来都不知道它的存在。它们不是在同一时间引入的我认为向后兼容性非常重要,
f“…”
使用与
.format()
相同的格式字符串,因此实际上只有两种格式字符串。引入
.format
后的初衷是不推荐%-格式,但这并没有发生。(这很好。)默认情况下,向Unicode的移动反映了行业内的更广泛的运动。一方面,java采用了它,这有助于巩固标准。3.6,这是唯一的方式,考虑2-3.6个过渡期。我的反应与Jonathon Reinhart关于进化论和解决不足的观点相一致,并得到了Pyth.的支持。关于博士。那些投反对票的人如果能提到原因,那将有助于我进一步有意义地参与。谢谢!