Python 字符串 .format 方法详解

Python 字符串 .format 方法详解


前言

字符串 .format 方法 为字符串格式化方法之一,欲要了解更多请移步总集篇 Python 字符串格式化最强详解2.0 『如何输出好看的内容』


利用字符串 .format 方法

自 Python 2.6 版本发布,字符串类型新增了一个方法 .format() 用于字符串格式化,这也是 Python 第二种字符串格式化方法
使用 str.format(a) 方法可以摆脱 占位符数据类型判断 的烦恼,并且功能更加强大,先来看看语法

(一)、基本使用

张三今天不买彩票了,但在路上遇到了 罗翔,两人欢快的谈起了 法律知识

print("张三今天不买彩票了,但在路上遇到了{},两人欢快的谈起了{}".format("罗翔", "法律知识"))

👆🏻使用了花括号{}代替了 占位符所使用百分号%,并在结尾调用了str.format()方法,将参数给传了进去,之间用逗号进行分割
👇🏻还能指定参数传递的位置,在花括号{}中指定,而 .format() 中的顺序应为 .format(1, 2, 3, 4, 5, .....)

print("张三今天不买彩票了,但在路上遇到了{0},两人欢快的谈起了{1}".format("罗翔", "法律知识"))
print("张三今天不买彩票了,但在路上遇到了{1},两人欢快的谈起了{0}".format("罗翔", "法律知识"))
张三今天不买彩票了,但在路上遇到了罗翔,两人欢快的谈起了法律知识
张三今天不买彩票了,但在路上遇到了法律知识,两人欢快的谈起了罗翔

怎么样,看到这是不是已经可以感受到 .format() 方法比 占位符好用且更强大的 原由
接着往下看,.format() 方法中还能使用关键字参数,使用参数名引用值

print("张三今天不买彩票了,但在路上遇到了{name},两人欢快的谈起了{topic}".format(name="罗翔", topic="法律知识"))

对于上述的传值方法,可以不限传递次数,且可以任意组合使用

print("{1}今天不买{0}了,但在路上遇到了{name},{1}、{name}"
      "两人欢快的谈起了{topic}".format("彩票", "张三", name="罗翔", topic="法律知识"))
张三今天不买彩票了,但在路上遇到了罗翔,张三、罗翔两人欢快的谈起了法律知识

(二)、.format 方法的功能

1) 对数字类型处理

Ⅰ. 指定小数精度

这里的用法和占位符差不多,不同的是要在前面加个冒号 ,如 {:.2f}

i = 2		# 整数类型
f = 2.3333	# 浮点数类型
print("精确到小数点后两位:{:.2f}".format(i))
print("精确到小数点后两位:{:.2f}".format(f))
精确到小数点后两位:2.00
精确到小数点后两位:2.33

因为 str.format() 方法并不像 占位符方法一样需要 转换说明符,不保留小数 以整数形式表示 的方法作废,但可以先行转化为整数类型 int()

f = 2.3333
print("不保留小数:{:.0f}".format(f))
print("不保留小数:{}".format(int(f)))
不保留小数:2
不保留小数:2

这里使用的均是向下取整,详情请参考 Python 关于浮点数取整详解


Ⅱ. 带符号显示

这里的用法和占位符差不多,也是使用 + 符号

i = 2.3333
print("带符号显示: {:+} {:+}".format(-i, i))
print("带符号显示并精确到小数点后两位: {:+.2f}".format(i))
print("带符号显示并精确到小数点后两位: {:+.2f}".format(-i))
带符号显示: -2.3333 +2.3333
带符号显示并精确到小数点后两位: +2.33
带符号显示并精确到小数点后两位: -2.33

2) 对齐与填补

对齐符号书写格式描述
<{:<10}左对齐并且指定宽度10,一般配合宽度使用
>{:>10}右对齐并且指定宽度10,一般配合宽度使用
^{:^10}居中对齐并且指定宽度10,一般配合宽度使用
={:=+10}右对齐,与 > 不一样的是会携带符号在最左侧
只作用于整数或浮点数类型

x = "张三"
print("左对齐: {:<10}".format(x))
print("右对齐: {:>10}".format(x))
print("居中对齐: {:^10}".format(x))
左对齐: 张三        
右对齐:         张三
居中对齐:     张三    

如果不指定填充字符,那么输出的结果是将默认以空格为填充,如果指定填充类型的话,书写格式如下👇🏻

x = "张三"
print("左对齐: {:-<10}".format(x))
print("右对齐: {:->10}".format(x))
print("居中对齐: {:-^10}".format(x))
左对齐: 张三--------
右对齐: --------张三
居中对齐: ----张三----

这里单独讲一下 = 对齐符号

x = 2.333
print("右对齐: {:=10}".format(x))
右对齐:      2.333

如果直接使用这个符号的话,效果是和 > 对齐符号是 一样的
但如果把数值变成负数,再来看看

x = 2.333
print("右对齐: {:=10}".format(-x))
右对齐: -    2.333

可以发现,符号会显示到最左边,证明此对齐符号作用是 将数字右对齐,同时把 正负号 放到最左边

在默认情况下,正数不会显示 正号,显示那就得配合之前在 Ⅱ. 带符号显示中 提到过的 + 号来实现

x = 2.333
print("右对齐: {:=+10}".format(x))
右对齐: +    2.333

需要注意的是,== 对齐符号 只作用于 整数或浮点数,否则报错


3) type类型值和显示百分比

type类型值书写格式描述注意
b{:b}将十进制整数转换成二进制格式只适用整数
c{:c}将十进制整数转换 Unicode 对应字符只适用整数
d{:d}十进制整数只适用整数
e{:e}科学计数法,未指定精度时默认小数点后 6 位只适用数字类型
E{:E}科学计数法,不同的是使用大写字母 E 作分割字符只适用数字类型
f{:f}浮点数,未指定精度时默认小数点后 6 位只适用数字类型
F{:F}浮点数,于小写 f 不同在于以大写表示特殊类型 naninf只适用数字类型
o{:o}将十进制整数转换成八进制格式只适用整数
x{:x}将十进制整数转换成十六进制格式,小写字母表示 9 以上只适用整数
X{:X}将十进制整数转换成十六进制格式,大写字母表示 9 以上只适用整数
%{:%}显示百分比,默认小数点后六位,1=100%只适用整数、浮点数

结合上面讲过的内容使用 type类型值

  1. 显示百分比

    x = 0.23333
    print("居中显示百分比:{:%}".format(x))
    print("居中显示百分比:{:.2%}".format(x))
    
    居中显示百分比:23.333000%
    居中显示百分比:23.33%
    

    可以看到如果不指定精度,默认为小数点后六位显示,需要注意的是这个百分比并不是直接加个符号就完事了,是有换算的真实百分比,1=100%为单位

    相信仔细看到这的已经注意到了,此写法和 之前提到过的 Ⅰ. 指定小数精度 写法很像,这里再做一些补充:

    指定小数精度书写格式为 {:.精度f},这个 f 其实就是将数值转换成浮点数类型,传递 浮点数 时可以不用加 f {:.精度}会以整数部分作为精度开头而不是小数部分,可要是传递 整数 的话将会报错,所以加个小小的 f 更是为了书写规范 以及 代码严谨性

  2. 科学计数法

    print("科学计数法: {:e}".format(23333))
    print("科学计数法: {:E}".format(23333))
    
    科学计数法: 2.333300e+04
    科学计数法: 2.333300E+04
    
  3. 各进制表示

    分别展示 二进制、八进制、十六进制对齐与填补 的搭配使用

    这与 百分号占位符 使用方法上 相似

    print("居中对齐 二级制: {:-^10b}".format(31))
    print("居中对齐 八进制: {:-^10o}".format(31))
    print("居中对齐 十六进制: {:-^10x}".format(31))
    print("居中对齐 十六进制: {:-^10X}".format(31))
    
     居中对齐 二级制: --11111---
     居中对齐 八进制: ----37----
     居中对齐 十六进制: ----1f----
     居中对齐 十六进制: ----1F----
    

    如果需要显示进制前轴,则需要在前面加个 # 符号

    print("居中对齐 二级制: {:-^#10b}".format(31))
    print("居中对齐 八进制: {:-^#10o}".format(31))
    print("居中对齐 十六进制: {:-^#10x}".format(31))
    print("居中对齐 十六进制: {:-^#10X}".format(31))
    
    居中对齐 二级制: -0b11111--
    居中对齐 八进制: ---0o37---
    居中对齐 十六进制: ---0x1f---
    居中对齐 十六进制: ---0X1F---
    
  4. 整数转换 Unicode 对应字符

    用法和 百分号占位符 一样, .format 可以结合其他功能使用

    print("{:c}{:c}{:c}{:c}".format(20320, 22909, 19990, 30028))
    
    你好世界
    

(三)、书写格式和优先顺序👺

.format() 方法的书写格式如下: 👇

英文原文

"{[[fill]align][sign][width][grouping_option][.precision][type]}".format(...)

中文释义

"{[[填充]对齐][符号][宽度][分组选项][.精度][类型]}.format(...)"

  1. 填充 fill 任意字符,与 对齐 搭配使用

  2. 对齐 align <、>、^、=,参考 3) 对齐与填补

  3. 符号 sign +、-、" "、#

    符号 sign书写格式描述
    +{:+}为数字添加正负号,参考Ⅱ. 带符号显示
    -{:-}只为负数添加负号(默认),参考Ⅱ. 带符号显示
    " "(空格){: }负数会显示负号,正数前会多个空格
    #{:#}对于换算进制的类型值,会在开头显示进制前缀,参考 3. 各进制表示
  4. 宽度 width 定义最小宽度的整数,默认宽度由内容确认

  5. 分组选项 grouping_option

    分组符号描述
    _以下划线 _ 进行分组
    ,以逗号 , 进分组

    这个分组功能比较有趣,用不上的时候不知道有,用的上的时候又很管用
    先来看看官网是怎么描述这两个 分组符号 的

    1. ’,’ 选项表示使用逗号作为千位分隔符
    2. ’_’ 选项表示对浮点表示类型和整数表示类型 ‘d’ 使用下划线作为千位分隔符。 对于整数表示类型 ‘b’, ‘o’, ‘x’ 和 ‘X’,将为每 4 个数位插入一个下划线。 对于其他表示类型指定此选项则将导致错误。
    1. 货币形式

      print("货币形式: {:,d}".format(66**6))
      print("货币形式: {:_d}".format(66**6))
      
      货币形式: 82,653,950,016
      货币形式: 82_653_950_016
      
    2. 各进制表示

      print("二进制: {:#_b}".format(31**5))
      print("八进制: {:#_o}".format(31**5))
      print("十六进制: {:#_x}".format(31**5))
      print("十六进制: {:#_X}".format(31**5))
      
      二进制: 0b1_1011_0100_1101_1000_1001_1111
      八进制: 0o1_5515_4237
      十六进制: 0x1b4_d89f
      十六进制: 0X1B4_D89F
      
  6. .精度 .precision 指定小数精度,参考 Ⅰ. 指定小数精度

  7. 类型 type 参考 4) type类型值和显示百分比

别忘了还可以配合 1) 基本使用 里提到的 指定参数传递位置 灵活使用


相关博客😏

  • 14
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当您需要将变量插入到字符串中时,您可以使用Python字符串格式化方法 `str.format()`。以下是一些用法示例: 1. 基本用法 您可以使用一对大括号 `{}` 来表示需要插入变量的位置,然后通过 `str.format()` 方法将变量传递进去。例如: ```python name = 'Alice' age = 25 print('My name is {}, and I am {} years old.'.format(name, age)) ``` 输出结果为:`My name is Alice, and I am 25 years old.` 2. 指定变量位置 如果您希望在字符串中指定变量的位置,您可以在大括号内指定变量的索引位置。例如: ```python name = 'Alice' age = 25 print('My name is {0}, and I am {1} years old.'.format(name, age)) ``` 输出结果为:`My name is Alice, and I am 25 years old.` 3. 使用变量名称 如果您希望在字符串中使用变量的名称而不是位置,您可以在大括号内指定变量的名称。例如: ```python name = 'Alice' age = 25 print('My name is {n}, and I am {a} years old.'.format(n=name, a=age)) ``` 输出结果为:`My name is Alice, and I am 25 years old.` 4. 格式化数字 您可以使用不同的格式指定符号来格式化数字,例如指定小数点后的位数,使用千位分隔符等等。例如: ```python x = 123.456 print('The value of x is {:.2f}'.format(x)) # 保留两位小数 print('The value of x is {:,}'.format(x)) # 添加千位分隔符 ``` 输出结果为:`The value of x is 123.46` 和 `The value of x is 123.456` 以上是 `str.format()` 方法的一些常见用法,希望对您有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值