Python 字符串格式化最强详解2.0 『如何输出好看的内容』

在这里插入图片描述

Python 字符串格式化最强详解2.0 『如何输出好看的内容』


思维导图🤴

在这里插入图片描述

熊猫人表情包


一、远古时期 % 占位符方法🙉

% 格式化操作符 又称 %占位符方法, 在 Python 的 远古时期 就已经存在了,这是最古老的方法,这种写法来自C语言的printf函数,在一些使用老版本 Python 的项目工程上多多少少还能见到这种方法,但这种方法较新式方法来说并不怎么好用

为什么说 占位符 方法不好用,用过的人都知道,它写起来相较其他字符串格式化方法会更麻烦,里面涉及到很多的数据类型判断🙄

如果需要 传入进去的内容是属于字符串类型的,那么在字符串格式化里的 填充位置 写的是 %s,但如果输入的不是字符串类型,比如整数类型,那就得变成 %d

官方手册对此是这么描述占位符方法的

注解 此处介绍的格式化操作具有多种怪异特性,可能导致许多常见错误(例如无法正确显示元组和字典)。 使用较新的 格式化字符串字面值,str.format() 接口或 模板字符串 有助于避免这样的错误。 这些替代方案中的每一种都更好地权衡并提供了简单、灵活以及可扩展性优势。

(一)、转换说明符

表示类型大全
转换说明符书写格式描述
"s""%s"字符串格式
"c""%c"将整数转换成相应的 unicode1 字符
"o""%o"八进制格式
"d""%d"十进制整数格式
"x""%x"十六进制格式,使用小写字母表示 9 以上的数码
"X""%X"十六进制格式,使用大写字母表示 9 以上的数码
"f""%f"浮点数格式,精确到小数点后六位
"%%""%%"字符 “%” 本身

1) 先拿刚刚提到的 %s %d 做例子🍖

张三今天去买彩票,非常幸运的中了 2333 块钱 ,在 Python 中如果打印这句话那就是这么写 print("张三今天去买彩票,非常幸运的中了 2333 块钱")
这里我们打印的是字符串,且已经知道了张三中了多少钱,但如果我们并不知道张三中了多少钱,需要后期告知的情况下,才能将这句话给打印出来,对于这种问题,可以使用字符串格式化解决,那么怎么去写呢(占位符方法)?🤔

money = "23333"
print("张三今天去买彩票,非常幸运的中了 %s 块钱" % money)

上述代码中,成功使用了占位符方法,将 张三的中奖金额 给传了进去
可能有读者要问了,不是说 %s 是传入字符串格式吗,怎么能把整数给传进去,注意看,这里的money 变量是字符串格式,23333 左右有引号

那如果 money=233333 是整数格式呢又要怎么传进去呢,很简单,把 %s 改成 %d 即可 「注意把23333的双引号去掉

money = 23333
print("张三今天去买彩票,非常幸运的中了 %d 块钱" % money)

2) 如果要传入多个参数又要怎么做

张三星期六那天去买彩票,非常幸运的中了6 块钱,这里需要传入两个不同的值,分别是 星期六6

money = "6"
date = "星期六"
print("张三%s那天去买彩票,非常幸运的中了%s块钱" % (date, money))

观察上面的代码,可以发现分别在需要格式化的地方使用了 %s 占位符,并且在最后面传入参数的地方使用了一个元组,将数值圈了起来,并且顺序是从左往右,跟占位符的位置一 一对应

那如果是不同字符串表示类型的占位符那该怎么做,还是很简单,把 %s 改成 %d 即可,但要注意,要根据占位符的位置一 一把需要传入的参数对应上,否则会照成字符串类型的参数被 %d 所表示,会直接报错注意把6的双引号去掉

money = 6
date = "星期六"
print("张三%s那天去买彩票,非常幸运的中了%d块钱" % (date, money))

3) 看完上述内容,其实其他字符串表示类型使用起来也是大同小异,让我们看看示例🍗

  1. %c 是将整数转成对应的 Unicode 字符,这里打印 你好世界 在 Unicode 中的对应位置

    print("%c%c%c%c" % (20320, 22909, 19990, 30028))
    
  2. %o 输出八进制,逢八进一

    print("%o" % 8)
    
  3. %x 输出十六进制,逢十六进一,用小写表示十六进制

    print("%x" % 0xf)	# 输出f
    
  4. %X 输出十六进制,逢十六进一,用大写表示十六进制

    print("%X" % 0xf)	# 输出F
    
  5. %f 输出浮点数,精确到小数点后六位,超过的话按五舍六入原则进一

    print("%f" % 56.5666666)    # 输出56.566667
    
  6. %% 输出 % 本身

    print("%%" % ())
    

占位符方法逐渐 被 新式字符串格式化方法所取代,关于新式方法下面会有提到


(二)、占位符 方法的功能

1) 指定显示宽度

除了上述提到最基本的说明符类型,字符串格式化 占位符方法 还有其他功能,比如这个指定显示宽度

观察下面的代码

x = 123456
print("指定长度10:%10d" % x)
print("指定长度5:%5d" % x)
指定长度10123456
指定长度5123456

可以看到 x 的宽度为六,当指定宽度为十时,会用空格填补剩余的四个宽度,并且右对齐
细心的可能注意到了一点,明明x 的宽度为六,可指定宽度为五时也能全部打印,这是因为当数据的实际宽度大于所指定宽度时,会按照实际的宽度打输出


2) 指定对齐方式

符号描述
-左对齐,并不是变数值变负
+表示输出的数值带符号,带的符号根据数值正负决定
0表示宽度不足时用0代替空格填报剩余宽度
#对于换算进制的转换说明符,会在开头显示进制前缀

+、- 符号

x = 123456
print("%+d" % x)
print("左对齐并指定长度10:%-10d" % x)
print("带符号显示并指定长度10:%+10d" % x)
print("带符号显示并指定长度10:%-10d" % x)
+123456
左对齐并指定长度10123456    
带符号显示并指定长度10+123456
带符号显示并指定长度10123456   

0、# 符号

x = 123456
print("指定长度10:%010d" % x)
print("指定长度5:%05d" % x)
print("指定长度10并左对齐:%#-10x" % 31)
指定长度100000123456
指定长度5123456
指定长度100x1f      

结合上面的表去看代码


3) 指定小数精度

先想个问题?什么数字类型是整数部分和小数形式组成
浮点数! 那要用到的说明符因是 %f

f = 2.33333
print("精确到小数点后三位:%.3f" % f)
精确到小数点后三位:2.333

那如果传入整数类型呢?可以看到如果是没有小数点的整数,会转化成浮点数并保留小数点后三位

f = 2
print("精确到小数点后三位:%.3f" % f)
精确到小数点后三位:2.000

上面的这些是精确到后三位 %.3f,如果要精确到后两位 => %.2f

讲了这么多,那如果不保留小数要怎么做呢 先想想

其实很简单,可以想到的是:

  1. 保留小数点后0位
  2. 以整数形式表示
f = 2.33333
print("不保留小数:%.0f" % f)
print("不保留小数:%d" % f)
不保留小数:2
不保留小数:2

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


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

占位符方法的书写格式如下: 👇

“%(映射键)[符号][宽度][.精度][转换类型]” % ...
  1. 映射键: 在上面的示例中,传单个值不加括号,传多个值时把值放进括号里,但其实还能有键值对的传值方式👇🏻

    print("张三%(date)s那天去买彩票,非常幸运的中了%(money)d块钱" % {"date": "星期六", "money": 2333})
    
  2. 符号: 参考 2) 指定对齐方式

  3. 宽度: 参考 1) 指定显示宽度

  4. .精度: 参考 3) 指定小数精度

  5. 转换类型: 参考 (一)、转换说明符

好了,关于字符串格式化 占位符方法 就讲到这了,相信你已经学会了




二、利用format函数在

自 Python 2.6 版本发布,字符串类型新增了一个新方法 .format() 用于字符串格式化,这也是 Python 第二种字符串格式化方法
高级字符串格式化机制(advanced string formatting),它的表达能力比老式C风格的格式字符串要强,使用 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) 基本使用 里提到的 指定参数传递位置 灵活使用




三、最方便快捷的 f-string 方法😍

插值格式字符串(interpolated format string),简称 f-string,这是一个较新的 字符串格式化 方法,伴随着 Python3.6 的发布而诞生,也是到目前而言,最方便快捷的 字符串格式化 方法,我最常用的就是这种方法

(一)、f-string 方法的基本使用

这个简称来由的原因也很有趣,先来看一段 f-string 字符串格式化的简单使用语法

name1 = "张三"
name2 = "罗翔"
print(f"{name1}他是一个{'法外狂徒'},今天他遇到了{name2},从此改过自新")
  1. 首先看看结构,因为在字符串前面带有一个 fF 的前缀,所以又将其 称为 f-string 字符串格式化 方法,是不是很直接呢
  2. {} 字符之间写 可以引用的变量,字段,表达式等,在上面的代码中,使用了两种方法,一是引用变量,二是直接在花括号里写入 内容
  3. 在花括号中写入字符串内容,需要注意字符串引号不能与外层字符串引号一致,如果外层为双引号,那花括号内字符串应为单引号

传入各种类型

上面只是简简单单的传入了 字符串类型的数据,那再尝试入其他类型

p1 = 6                              # 整数类型
p2 = 2.3333                         # 浮点数类型
p3 = 2e+2                           # 科学计数法
p4 = 2**3                           # 运算符
p5 = True if 1 == 1 else False      # 三元表达式
p6 = list(range(5))                 # 列表
p7 = [i*10 for i in range(1, 5)]    # 列表生成式
print(f"{p1}|{p2}|{p3}|{p4}|{p5}|{p6}|{p7}")
print("{}|{}|{}|{}|{}|{}|{}".format(p1, p2, p3, p4, p5, p6, p7))
6|2.3333|200.0|8|True|[0, 1, 2, 3, 4]|[10, 20, 30, 40]
6|2.3333|200.0|8|True|[0, 1, 2, 3, 4]|[10, 20, 30, 40]

其实看到这,应该就能明白为啥说 f-string 是最方便快捷的 字符串格式化方法

  • f-string 和 .format() 字符串格式化 方法一样也能摆脱 占位符数据类型判断 的烦恼,且从使用语法上看,无非是一个写在花括号里,一个写在花括号外,两则使用起来大同小异。
  • 从结构长度和可阅读性上来说,f-string 方法明显更胜一筹,能很清楚的知道哪个花括号对应了什么样的值,直接明了

(二)、f-string 方法的功能

f-string 方法更像是 .format() 方法的升级版

  • 一是体现在都是使用到了花括号,二是其功能继承了 .format() 方法,同时其功能也更完善
  • f-string 方法的功能,我认为 以书写格式中的冒号为划分成两部分:冒号前和冒号后👇

1) 冒号前

Ⅰ. f-string的转换符

这里说的转换符和 上面两个方法中的转换符不太一样,f-string 方法的转换符是调用 内置函数对 求值结果先转换再格式化,转换符配合感叹号使用

转换符调用函数函数作用
!sstr()将对象转化成字符串
!rrepr()将对象转化成可打印表示形式的字符串(解释器读取的形式)
!aascill()ASCII编码字符直接返回内容,非ASCII编码字符会使用 \x、\u 和 \U 来转义

这里简单说一下 str()repr() 的差别,str是将对象或则说一个内容转化成字符串,在打印出来的时候是不带有引号的,如果是一个字符串对象时,str() 会自动识别,不做任何更改。repr() 的差别就在这,使用这个函数,会对字符串再字符串化一次,也就是变成嵌套字符串,在打印时是带引号的

print(f"转换符!s: {'张三'!s} ")
print(f"转换符!s: {56!s} ")
print(f"str(): {str('张三')} ")
print(f"转换符!r: {'张三'!r} ")
print(f"转换符!r: {56!r} ")
print(f"repr(): {repr('张三')} ")
print(f"转换符!a: {'张三'!a} ")
print(f"转换符!a: {56!a} ")
print(f"ascii(): {ascii('张三')} ")
转换符!s: 张三 
转换符!s: 56 
str(): 张三 
转换符!r: '张三' 
转换符!r: 56 
repr(): '张三' 
转换符!a: '\u5f20\u4e09' 
转换符!a: 56 
ascii(): '\u5f20\u4e09' 

Ⅱ. 变量名显示

在 f-string 功能中有个等号,如果使用此功能,输出将包含表达式文本,此功能是 3.8 版本功能,注意匹配Python版本使用

name = "张三"
job = "法外狂徒"
print(f"{name=}")
print(f"{name = !r}")
print(f"{name + '是' + job= }")
name='张三'
name = '张三'
name + '是' + job= '张三是法外狂徒'
  • 使用 = 号 功能时,表达式中的空格也会一并输出

2) 冒号后

Ⅰ. 对数字类型处理

指定小数精度和带符号处理

x = 2.33333
print(f"{x:.2f}")
print(f"{x:+.2f}")
print(f"{x:+}")
print(f"{2.333:+.2f}")
2.33
+2.33
+2.33333
+2.33

Ⅱ. 对齐与填补

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

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

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

是不是感觉冒号后的写法很眼熟呀,没错!大致就是 .format() 的写法这也是前面提到的 f-string 方法更像是 .format() 方法的升级版的原因,可以去尝试一下 .format() 其他的一些功能写法写在冒号后面


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

f-string 方法书写格式如下: 👇

英文原文

"{f_expression[=][! conversion][: format_spec]}"

中文释义

{f表达式[=][! 转换][: 格式规格]}

  1. f表达式 f_expression 看起来高大上,其实就是指 变量,字段,表达式
  2. =: 输出将包含表达式文本,’=’ 以及求值结果,参考 Ⅱ. 变量名显示
  3. ! 转换 ! conversion 参考 Ⅰ. f-string的转换符
  4. : 格式规格 : format_spec: 就是使用.format 的功能,详情参考 (二)、.format 方法的功能
    但对于特殊的对象,比如 datetime,还能这么去做
    now = datetime.datetime.now()
    print(f"{now:%Y-%m-%d}")
    print("{:%Y-%m-%d}".format(now))
    
    2021-04-14
    2021-04-14
    

    .format 同样适用


补充说明🙄

这上面内容的示例中,我将 字符串格式化后 的结果都用到 print 内置函数上面,这是为了便于展示,字符串格式化不是 只用作打印的,要避免这个误区,可以把 字符串格式化 后的结果放在变量中保存,如 x = f"张三的{'提醒'}"

对于这三种 字符串格式化 方法的使用,我认为可根据自己的习惯和应用场景自由选择,不必太在意优劣之分,比如百分号占位符方法是远古时期就存在的,所以对于老版本的 Python 其通用兼容性更高,还有在目前的 Python 计算机二级考试中,使用到的就是 .format() 方法


笔记文件下载链接


相关博客😏


  1. unicode 维基百科 ↩︎

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值