python命名语法规则_Python3 format() 函数详解 将字符串按照规则格式化

Python3 format() 函数详解 将字符串按照规则格式化

format()函数的主要作用是按照指定的规则对字符串进行格式化,可以替换固定位置的内容,也可以对字符串填充对齐、数字的格式处理等等。虽然看上去它只是一个简单的数据替换以及数据格式化,但是它真的不简单,它拥有非常多的功能,有负责的内容替换的,有负责数据转换的,还有负责数据格式化的,每个功能都有很多选项,接下来逐一讲解。

它是Python的内置函数,在python文件中直接可以使用。

fbab98577a84f852395af2687f6f8b54.jpg

语法

str.format(**args)

替换规则

字符串中包含由大括号{}包围的"替换字段",其中大括号中填写文本替换以及格式化规则,如果不填写规则(使用{}),则视为文本格式并且不对文本进行任何格式化,直接替换。文本也是比较常用的一种形式。

完整的格式如下:

{[field_name][!conversion][:format_spec]}

field_name - 替换命名方式

可以使用默认值、对象名称、对象属性名称、对象索引等的方式来指定需要替换内容。它是可选的,不填写按顺序替换内容。

命名方式含义示例

不填写不填写的情况下将按照顺序替换内容,在提供替换值时需要注意先后顺序,下面几种方式不受顺序控制。{}

arg_name直接使用对象的值{name}

arg_name.attribute_name获取对象的指定属性的值{name.first}

arg_name[element_index]获取对象的指定索引,可以是数字索引,也可以是字符串索引{name[0]} 或 {name['first']}

!conversion - 转换规则

替换后可以对替换的值使用转换函数进行直接转换,目前允许使用的转换函数有:str(),repr(),ascii(),在使用时需要书写它们对应的缩写,并以感叹号(!)开始。它是可选的,不填写就不转换。

选项含义示例

'r'调用repr()函数对值进行转换{!r}

's'调用str()函数对值进行转换{!s}

'a'调用ascii()函数对值进行转换{!a}

:format_spec - 格式化规则

在值被替换以及转换(如果设置的话)后还可以对值进行格式化,接下来将介绍各种格式化规则的用法。它是可选的,不填写就不格式化值。

需要说明一下:在下面的示例中会出现[format_spec]以及[!conversion],它们分别代表了文中提到的替换命名以及转换规则,由于它们是可选的,所有使用方括号括起来了,写在示例中只是为了体现他们的书写顺序,并不是一定存在。

格式化完整的参数如下:

[[fill]align][sign][#][0][width][grouping_option][.precision][type]

§ fill - 字符

任何字符,只能是一个字符。fill是可选的,但是如果设置了fill,就必须和align搭配使用。

§ align - 对齐方式

选项含义示例

'<'强制字符串在可用空间内左对齐(这是大多数对象的默认值)。{:<}

'>'强制字符串在可用空间内右对齐(这是数字的默认值)。{:>}

'='强制在符号(如果有)与数字之间填充若干指定字符,被允许的符号只有'+'、'-'、' ' ,此方式只能应用在值为数字的情况时。{:[x]=+}

'^'强制字符串在可用空间内居中。{:^}

需要注意的是,如果没有设置填充宽度(width),宽度始终与填充它的数据大小相同,那么对齐选项就没有意义了。

另外,如果宽度设置的过小,比大部分数据的宽度都小。那么对齐的效果可能未必很好。

所以宽度最好设置的大于或等于数据的最大宽度,效果最佳。

§ sign - 符号

选项含义

'+'用于表示正数和负数

'-'用于表示仅用于负数(这是默认行为)

space用于表示正数为空格,负数为减号

§ # - 数字的格式

'#'选项仅对integer,float,complex和Decimal类型有效。

对于二进制、八进制、十六进制的整数,会在数字的增加前缀"0b"、'0o'、'0x'。

对于浮点数、复数和十进制组成的小数(Decimal),转换后的结果始终都包含小数点字符。

§ 0 - 数字的对齐

这是一个特殊的对齐方式,当没有明确给出对齐方式时,则在width选项前面加'0'字符可以为数字类型是字符0进行填充。这相当于填充字符'0',对齐类型为'='。

§ width - 最小填充宽度

width是定义最小数据宽度的十进制整数。如果未指定,则数据宽度将由内容长度确定。

§ grouping_option - 千位分隔符

选项含义示例

','使用逗号(,)对数字进行千位分割,每3位数字使用一次分隔符{:,}

'_'使用下划线(_)对数字进行千位分割,没3位数字使用一次分隔符{:_}

§ .precision - 字符精度

表示在使用'f'和'F'格式化的浮点数的小数点后应显示多少位数。

表示在使用'g'和'G'格式化的浮点数的小数点前后(整数位+小数位)应显示多少位数。

对于非数字类型,限制其显示的字符最大长度。

§ type - 数据类型

类型确定了应该如何呈现数据,不同的数据需要使用不同的类型。

用于表示字符串类型:

类型含义

's'字符串格式,这是字符串的默认类型,可以省略。

None(不设置)和's'类型一样

用于表示整数类型:

类型含义

'b'将整数转换为二进制格式

'c'将整数转换为相应的unicode字符

'd'将整数转换为十进制格式

'o'将整数转换为八进制格式

'x'将整数转换为十六进制格式,以小写字母表示9以上的数字。

'X'将整数转换为十六进制格式,以大写字母表示9以上的数字。

'n'在一般情况下与'd'类型相同,但是在不同的语言环境可能显示不同,它会适当的插入数字分隔符。在中文语言环境是没有分隔符的。可以使用locale模块进行切换。

None和'd'类型一样

用于浮点和小数值类型:

类型含义

'e'将数字转换为以科学计数法表示的指数,默认精度为6。

'E'和'e'类型相同,只是它使用大写'E'作为分隔符。

'f'将固定保留小数点后6位,如果原数字小数点后位数超过6位且第7位大于5,则第6位+1,但第7位等于5时,则要看是否存在第8位且大于0,如大于0,第6位也+1,如果原数字小数点后不足6位的,则以0补充。如果指定了精度则按上述规则推算即可。

'F'与'f'类型相同,只是它会将nan转换为NAN,将inf转换为INF。

'g'一般格式,在未设置精度的情况下,它保留6位数(整数+小数),根据实际情况选择以固定位数或者科学计数法格式化结果,结果后面如果存在多余的0将会被舍去。有以及几种规则:如果整数位已经等于精度,则舍掉所有小数,并且以小数的第一位四舍五入进整数;如果整数位大于精度,则以exp指数的形式格式化,以精度位的下一位作为判断依据四舍五入;如果整数位不足精度位数,则使用小数位补充,不存在小数位或者整数位+小数位不足精度,则显示完整数字;如果整数位不足精度位数,且小数位大于剩余精度,则截取小数位剩余精度,以后一位小数为判断是否舍去还是进一,如后一位小数大于5,则进一,如后一小数小于5,则舍去,如后一位小数等于5且后二位小数大于0,则进一。

'G'与'g'类似一样,只是exp指数的'e'则会变为大写的'E',并且inf和nan也会变位INF和NAN。

'n'在一般情况下与'g'类型相同,但是在不同的语言环境可能显示不同,它会适当的插入数字分隔符。在中文语言环境是没有分隔符的。可以使用locale模块进行切换。

'%'在未指定精度的情况下,将数字乘以100,以'f'类型进行格式化,并在末尾加上百分号'%'。

None与'g'类型相似,只是在固定位数设置时,最少要有一位小数,否则会报错。

实例

§ 实例1 - 替换命名

#不填写命名

>>>"{}, {}, {}".format('a', 'b', 'c')

'a, b, c'

#使用数字索引指定顺序

>>>"{0}, {1}, {2}".format('a', 'b', 'c')

'a, b, c'

>>>"{2}, {1}, {0}".format('a', 'b', 'c')

'c, b, a'

#使用变量名称

>>>day = 'Monday'

>>>month = 'February'

>>>"{month}, {day}".format(month = month, day = day)

'February, Monday'

#使用对象属性

>>>class date:

... day = 'monday'

... month = 'February'

...

>>>o = date()

>>>"{date.day}, {date.month}".format(date = o)

'monday, February'

#使用字典键名

date = {

'day': 'Monday',

'month': 'February'

}

"{date[day]}, {date[month]}".format(date = date)

§ 实例2 - 转换函数

#使用repr()函数转换值。

>>>"{!r}".format('abc')

"'abc'"

#使用ascii()函数转换值。

>>>"{!a}".format('测试')

"'\\u6d4b\\u8bd5'"

#使用str()函数转换值,返回str对象。

>>>"{!s}".format(123)

'123'

§ 实例3 - 格式化规则

#左对齐

>>>'{:<5}{:<5}{:<5}'.format(1,2,3)

'1 2 3 '

#右对齐

>>>'{:>5}{:>5}{:>5}'.format(1,2,3)

' 1 2 3'

#居中对齐

>>>'{:^5}{:^5}{:^5}'.format(1,2,3)

' 1 2 3 '

#默认空格填充,可以自定义

>>>'{:*^5}{:-^5}{:#^5}'.format('1','2','3')

'**1**--2--##3##'

#带符号使用0填充

>>>'{:0=+5}'.format(1)

'+0001'

>>>'{:0=+5}'.format(-1)

'-0001'

#千位分割

>>>"{:,}".format(123456789)

'123,456,789'

>>>"{:_}".format(123456789)

'123_456_789'

#属性0和width合用,相同于按照width宽度使用0填充。

>>>"{:07}".format(1)

'0000001'

#设置精度,整数+小数位。

>>>"{:.5}".format(12.3456789)

'12.346'

#二进制

>>>"{:b}".format(30)

'11110'

#八进制

>>>"{:o}".format(30)

'36'

#十进制

>>>"{:d}".format(30)

'30'

#十六进制(e小写)

>>>"{:x}".format(30)

'1e'

#十六进制(E小写)

>>>"{:X}".format(30)

'1E'

#使用科学计数法

>>>"{:e}".format(123456)

'1.234560e+05'

#'E'大写

>>>"{:E}".format(123456)

'1.234560E+05'

#固定留小数点后6位,不足用0补充

>>>"{:f}".format(123.456)

'123.456000'

>>>"{:f}".format(123.4567890)

'123.456789'

#百分比 - 固定小数点留2位

>>>"{:.2%}".format(123.456789)

'12345.68%'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值