字符串格式化方法调用——为什么是格式化方法?——额外特性:特殊情况的”电池“(预编码模块)vs 通用技术

未匹配的标注

方法调用支持一些表达式不支持的额外特性,比如二进制类型码和(从2.7和3.1版本开始的)千分位分组。然而,将看到:格式化表达式通常能以其它方式达到同样效果。下面是二进制格式化的例子:

>>> '{0:b}'.format((2 ** 16) − 1) # (仅)方法调用才支持二进制格式码
'1111111111111111'
>>> '%b' % ((2 ** 16) − 1)
ValueError: unsupported format character 'b'...
>>> bin((2 ** 16) − 1) # 但其它更通用的可选方法也起作用
'0b1111111111111111'
>>> '%s' % bin((2 ** 16) - 1) # 对方法和 % 表达式都可用
'0b1111111111111111'
>>> '{}'.format(bin((2 ** 16) - 1)) # 适用于 2.7/3.1+ 的相对编号
'0b1111111111111111'
>>> '%s' % bin((2 ** 16) - 1)[2:] # 切除 0b 获得精确的等价输出
'1111111111111111'

前面的说明显示了通用函数能类似地代替格式化方法的千分位分组选项,而且还完整地支持自定义。在下面这个例子中,一个简单的8行可重用函数让我们获得同样的功能而无需额外的特殊情况语法:

>>> '{:,d}'.format(999999999999) # 在 3.1/2.7 版本中的新的 str.format 方法 
'999,999,999,999'
>>> '%s' % commas(999999999999) # 但 % 通过简单的8行函数可以达到相同的效果
'999,999,999,999'

看前面的说明来获取更多逗号的比较。对二进制格式化来说,这(通用方法)和之前的 bin 的例子在本质上时相同的,但这里的 commas 函数是用户自定义的,而非内置的。因此,这个技术远比为单一目标添加的预编码工具或特殊语法更通用。

或许,这个例子也似乎显示了Python(和通用的脚步编程语言)更依赖于特殊用例的”预编码“工具而非通用开发技术的趋势——让代码依赖于那些预编码工具或模块且看起来很难证明其正确性(除非人们把软件开发视为一个终端用户企业)的一种思维方式。对一些人来说,学习如何编码算法来插入逗号而非被提供给一个可以这么做的工具可能对程序员更有益。

这里将抛开哲学争论不谈,但从实践的角度看,在这个例子中的这个趋势的最终效果是不得不学习和记住额外的语法。考虑到它们的可选方法,现在还不清楚这些方法的额外特性是否足够令人信服从而有确定性意义。

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

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~