字符串格式化方法调用——为什么是格式化方法?——现在可选而且不太可能被使用

未匹配的标注

至少 format 方法更清楚(有争议地)的一个用例是当有许多值要被替换到格式字符串中时。比如将在第31章中见到的 lister.py 类示例,将6个项替换进一个字符串,在这个示例中方法的 {i} 位置标记似乎稍微比表达式的 %s 要更简单:

'\n%s<Class %s, address %s:\n%s%s%s>\n' % (...) # 表达式
'\n{0}<Class {1}, address {2}:\n{3}{4}{5}>\n'.format(...) # 方法

另一方面,在 % 表达式中使用字典可以将这个差异减小很多。在某种程度上,这也是格式化复杂性的最糟糕的情况,而且在实践中不是很常见;更多的典型用例似乎更悬而未决。而且,从3.1和2.7版本开始,对替换目标的相对位置进行编号成为可选的,潜在地完全破坏了这个(官方)声称的好处:

>>> 'The {0} side {1} {2}'.format('bright', 'of', 'life') # Python 3.X, 2.6+
'The bright side of life'
>>> 'The {} side {} {}'.format('bright', 'of', 'life') # Python 3.1+, 2.7+
'The bright side of life'
>>> 'The %s side %s %s' % ('bright', 'of', 'life') # All Pythons
'The bright side of life'

考虑到它的简洁性,这里的第二个很可能比第一个更受欢迎,但似乎抵消了方法的部分优势。比如,比较浮点格式化的效果——格式化表达式仍更简洁,且仍看起来更整齐:

>>> '{0:f}, {1:.2f}, {2:05.2f}'.format(3.14159, 3.14159, 3.14159)
'3.141590, 3.14, 03.14'
>>> '{:f}, {:.2f}, {:06.2f}'.format(3.14159, 3.14159, 3.14159)
'3.141590, 3.14, 003.14'
>>> '%f, %.2f, %06.2f' % (3.14159, 3.14159, 3.14159)
'3.141590, 3.14, 003.14'

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~