python中的格式化显示

python中的格式化显示


format_spec是格式说明符,它是:

• format(my_obj, format_spec)的第二个参数,或者
• str.format()方法的格式字符串,{}里代换字段中冒号后面的部分

#示例1
>>> brl = 1/2.43  # BRL到USD的货币兑换比价 
>>> brl 
0.4115226337448559 
>>> format(brl, '0.4f')  # ➊ 
'0.4115' 
>>> '1 BRL = {rate:0.2f} USD'.format(rate=brl)  # ➋ 
'1 BRL = 0.41 USD'

➊ 格式说明符是’0.4f’。
➋ 格式说明符是’0.2f’。代换字段中的’rate’子串是字段名称,与格式说明符无关,但是它决定把.format()的哪个参数传给代换字段。

第2条标注指出了一个重要知识点:’{0.mass:5.3e}'这样的格式字符串其实包含两部分,冒号左边的’0.mass’在代换字段句法中是字段名,冒号后面的’5.3e’是格式说明符。格式说明符使用的表示法叫格式规范微语言。

b和x分别表示二进制和十六进制的int类型,f表示小数形式的float类型,而%表示百分数形式

>>> format(42, 'b') 
'101010' 
>>> format(2/3, '.1%') 
'66.7%'

格式规范微语言是可扩展的,因为各个类可以自行决定如何解释format_spec参数。

下面是内置的format()函数和str.format()方法的几个示例:

>> from datetime import datetime 
>>> now = datetime.now() 
>>> format(now, '%H:%M:%S') 
'18:49:05' 
>>> "It's now {:%I:%M %p}".format(now) 
"It's now 06:49 PM"
#Vector2d.__format__方法,第1版
# 在Vector2d类中定义 
 
def __format__(self, fmt_spec=''): 
    components = (format(c, fmt_spec) for c in self)  # ➊ 
    return '({}, {})'.format(*components)  # ➋ 

➊ 使用内置的format函数把fmt_spec应用到向量的各个分量上,构建一个可迭代的格式化字符串。
➋ 把格式化字符串代入公式’(x, y)'中。

#Vector2d.__format__方法,第2版,现在能计算极坐标了
def __format__(self, fmt_spec=''): 
    if fmt_spec.endswith('p'):  #➊ 
        fmt_spec = fmt_spec[:-1]  #➋ 
        coords = (abs(self), self.angle())  #➌ 
        outer_fmt = '<{}, {}>'  #➍ 
    else: 
        coords = self  #➎ 
        outer_fmt = '({}, {})'  #➏ 
    components = (format(c, fmt_spec) for c in coords)  #➐ 
    return outer_fmt.format(*components)  #➑

➊ 如果格式代码以’p’结尾,使用极坐标。
➋ 从fmt_spec中删除’p’后缀。
➌ 构建一个元组,表示极坐标:(magnitude, angle)。
➍ 把外层格式设为一对尖括号。
➎ 如果不以’p’结尾,使用self的x和y分量构建直角坐标。
➏ 把外层格式设为一对圆括号。
➐ 使用各个分量生成可迭代的对象,构成格式化字符串。
➑ 把格式化字符串代入外层格式。

>>> format(Vector2d(1, 1), 'p') 
'<1.4142135623730951, 0.7853981633974483>' 
>>> format(Vector2d(1, 1), '.3ep') 
'<1.414e+00, 7.854e-01>' 
>>> format(Vector2d(1, 1), '0.5fp') 
'<1.41421, 0.78540>'

如上所示为用户自定义的类型扩展格式规范微语言并不难.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值