Python 远古方法 % 占位符详解

本文详细介绍了Python中古老的方法——%占位符字符串格式化,包括转换说明符、功能特性和书写格式。通过示例展示了如何使用%s、%d等进行字符串和数字的格式化,以及如何处理多个参数。此外,还提到了新式格式化方法的优越性。
摘要由CSDN通过智能技术生成

Python 远古方法 % 占位符详解


前言

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


远古时期 % 占位符方法🙉

%占位符方法 在 Python 的 远古时期 就已经存在了,这是最古老的方法,在一些使用老版本 Python 的项目工程上多多少少还能见到这种方法,但这种方法较新式方法来说并不怎么好用

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

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

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

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

(一)、转换说明符

表示类型大全
转换说明符书写格式描述
"s""%s"字符串格式
"c""%c"将整数转换成相应的 unicode[^1] 字符
"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. 转换类型: 参考 (一)、转换说明符

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


相关博客😏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值