欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python格式化之format与%

程序员文章站 2022-03-08 14:36:24
...
#!/usr/bin/env python 
# -*- coding:utf-8 -*-
__author__ = 'Abel'
"""
   Python中内置的%操作符和.format方式都可用于格式化字符串。先来看看这两种具体格式化方法的基本语法形式和常见用法。
   %操作符根据转换说明符所规定的格式返回一串格式化后的字符串,转换说明符的基本形式为: %[转换标记][宽度[.精确度]]转换类型。
其中常见的转换标记和转换类型分别下所示。如果未指定宽度,则默认输出为字符串本身的宽度。
转换标记       解释
   -        表示左对齐
   +        在正数之前加上+
(a space)   表示正数之前保留空格
   #        在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'
   0        表示转换值若位数不够则用0填充而非默认的空格
   c        转换为单个字符,对于数字将转换该值所对应的ASCⅡ码
   s        转换为字符串,对于非字符串对象,将默认调用str()函数进行转换
   r        用repr()函数进行字符串转换转换
   i d      转换为带符号的十进制数
   u        转换为不带符号的十进制数
   o        转换为不带符号的八进制
   x,X      转换为不带符号的十六进制
   e E      表示为科学计数法表示的浮点数
   f F      转成浮点数(小数部分自然截断)
   g G      如果指数大于-4或者小于精度值则和e相同,其他情况与f相同;
            如果指数大于-4或者小于精度值则和E相同,其他情况与F相同
"""
###  %操作符格式化字符串时有如下几种常见用法:
### (1)直接格式化字符或者数值。
print("score:%06.1f" % 9.5)    # score:0009.5
###(2)以元组的形式格式化
name,num = "Abel",10
print("%s today have %d classes" % (name, num))  #Abel today have 10 classes
dict = {"name":"Abel", "num":10}
print("%(name)s today have %(num)d classes" % dict) #Abel today have 10 classes
#注意上面的是%(name)s和%(num)d,不能漏了s和d。

"""
   format方式格式化字符串的基本语法为:[[填充符]对齐方式][符号][#][0][宽度][,][.精确度][转换类型]。
其中填充符可以是除了“{”和“}”符号之外的任意符号,对齐方式和符号分别如下所示。转换类型跟%操作符的转换类型类似。
 format方式格式化字符串的对齐方式:
对齐方式    解释
   <        表示左对齐,是大多数对象为默认的对齐方式
   >        表示右对齐,数值默认的对齐方式
   =        仅对数值类型有效,如果有符号的话,在符号后数值前进行填充,如-000029
   ^        居中对齐,用空格进行填充
format方式格式化字符串符号列表:
符号    解释
 +      正数前加+,负数前加-
 -      正数前不加符号,负数前加-,为数值的默认形式
 空格   正数前加空格,负数前加-
"""
###format方法几种常见的用法如下:
###(1)使用位置符号。
print("The number {0:,} in hex is :{0:#x}, the number {1:,} in oct is {1:#o}".format(6666,8888))
#The number 6,666 in hex is :0x1a0a, the number 8,888 in oct is 0o21270
###(2)使用名称
print("{name} has {num} classes today!".format(name = "Abel", num = 10))  #Abel has 10 classes today!
###(3)通过属性
class Customer(object):
    def __init__(self, name, gender, phone):
        self.name = name
        self.gender = gender
        self.phone = phone
    def __str__(self):
        return "Customer ({self.name},{self.phone})".format(self = self)  #Customer (Abel,698569)
print(str(Customer("Abel","male","698569")))
###(4)格式化元组的具体项
arr = (6,9,8)
print("X1:{0[0]},X2:{0[1]},X3:{0[2]}".format(arr))   #X1:6,X2:9,X3:8
"""
为什么要尽量使用 format方式而不是%操作符来格式化字符串:
理由一:fmat方式在使用上较%操作符更为灵活。使用 format方式时,参数的顺序与格式化的顺序不必完全相同,而用%方法需要使用字典形式才能达到同样的目的。
理由二: format方式可以方便地作为参数传递。
理由三:%最终会被 format方式所代替。这个理由可以认为是最直接的原因,根据Python的官方文档,format方法最终会取代%,
       在Python3.0中format方法是推荐使用的方法,而之所以仍然保留%操作符是为了保持向后兼容。
理由四:%方法在某些特殊情况下使用时需要特别小心。
"""

实用小建议:安装AD block可以屏蔽掉CSDN上的好多广告

上一篇: jq

下一篇: java String.format 小记