Python 在字符串格式化的两种方式
%
format
%, 关于整数的输出
%o:oct 八进制
%d:dec 十进制
%x:hex 十六进制
- print("整数:%d,%d,%d" % (1, 22.22, 33))
- print("整数不足 5 位, 左边补空格 %5d" % 22)
- print("整数不足 5 位, 左边补 0 %05d" % 22)
- print("整数不足 5 位, 右边补空格 %-5d" % 22, "end")
- print("八进制 %o" % 222)
- print("十六进制 %x" % 12)
执行结果
整数: 1,22,33
整数不足 5 位, 左边补空格 22
整数不足 5 位, 左边补 0 00022
整数不足 5 位, 右边补空格 22 end
八进制 336
十六进制 c
包含知识点
当你有多个参数需要格式化输出的时候, 需要用元组 (1,2,3) ; 注意不能用列表因为列表是可变的
若传入的是浮点数如 22.55 , 最后输出的是 22, 不会四舍五入哦
若传入了字符串 '22' , 是会报错滴!
%, 关于浮点数的输出
- print("浮点数:%f,%f" % (1, 22.22))
- print("浮点数保留两位小数:%.2f" % 22.222)
- print("浮点数保留两位小数, 宽 5 位, 不足补 0:%05.2f" % 2.222)
执行结果
浮点数: 1.000000,22.220000
浮点数保留两位小数: 22.22
浮点数保留两位小数, 宽 5 位, 不足补 0:02.22
包含知识点
默认保留 6 位小数, 可通过 .2f 这种形式指定小数位, 2 代表保留两位
%, 关于字符串的输出
- print("字符串:%s,%s,%s" % (1, 22.22, [1, 2]))
- print("字符串不足 5 位, 左边补空格 %5s" % '2')
- print("字符串不足 5 位, 右边补空格 %-5s" % '2', "end")
- print("字符串宽 10 位, 截取两位 %10.2s" % "hello.world")
执行结果
字符串: 1,22.22,[1, 2]
字符串不足 5 位, 左边补空格 2
字符串不足 5 位, 右边补空格 2 end
字符串宽 10 位, 截取两位 he
包含知识点
可以传入任意类型的数据, 譬如整数, 浮点数, 列表, 元组甚至字典, 他都会自动转成字符串类型
format 格式化输出
相对基本格式化输出采用 % 的方法, format()功能更强大, 该函数把字符串当成一个模板, 通过传入的参数进行格式化, 并且使用大括号 {} 作为特殊字符代替 %
format, 位置匹配(最常用)
不带编号, 即 "{}"
带数字编号, 可调换顺序, 即 "{1}","{2}"
带关键字, 即 "{a}","{tom}"
- print("今天是 {} 的{}生日会".format("帅哥", 18))
- print("今天是 {1} 的{0}生日会".format("帅哥", 18))
- print("今天是 {0} 的{1}生日会".format("帅哥", 18))
- print("今天是 {name} 的{key}生日会}".format(22, 11, name="帅哥", key=18))
- print("今天是 {name} 的{key}生日会}, 接着上{}".format("test", name="帅哥", key=18))
- # 以下会报错
- print("今天是 {0} 的{}生日会".format("帅哥", 18))
- print("今天是 {name} 的{key}生日会}, 接着上{}".format( name="帅哥", key=18,"test"))
执行结果
今天是帅哥的 18 生日会
今天是 18 的帅哥生日会
今天是帅哥的 18 生日会
今天是帅哥的 18 生日会
今天是帅哥的 19 生日会, 接着上 test
包含知识点
当你只写了 {} 时, 默认按传入的值的顺序读取
当你写了数字编号 {1} , 则可以读取对应位置上的值, 从 0 开始
当你指定了关键字 {name} , 如果不指定 name=xxx , 则会报错
当你指定了关键字, 又只写了 {} 时, 你传入带有关键字指定的值必须写在后面, 类似函数(形参在前, 实参在后)
{} 和 {1} 是不能共存的
总结
当用到 format 时, 一个字符串里面的格式化输出只用一种方式, 不要混合使用, 容易出问题且没有必要
format, 指定数据类型输出
- print("整数{:d}".format(123))
- print("浮点数{:5.2f}".format(123.19))
- print("字符串{:s}".format('123'))
- print("八进制{:o}".format(12))
- print("十六进制{:x}".format(13))
执行结果
整数 123
浮点数 123.19
字符串 123
八进制 14
十六进制 d
包含知识点
指定了 :s , 则只能传字符串值, 如果传其他类型值不会自动转换
当你不指定类型时, 你传任何类型都能成功, 如无特殊必要, 可以不用指定类型
如果要结合数字编号和关键字使用可以如下
- print("关键字 {num:d}".format(num=123))
- print("数字编号 {0:d},{1:s}".format(123, "123"))
执行结果
关键字 123
数字编号 123,123
format, 位数补齐
- print('默认左对齐, 宽度为 10, 不足补空格:{:10}'.format("123"), "end")
- print('左对齐, 宽度为 10, 不足补空格:{:<10}'.format("123"), "end")
- print('右对齐, 宽度为 10, 不足补空格:{}{:>10}'.format("start", "123"))
- print('右对齐, 宽度为 10, 取两位小数, 不足补 0:{:0>10.2f}'.format(22.22555))
执行结果
默认左对齐, 宽度为 10, 不足补空格: 123 end
左对齐, 宽度为 10, 不足补空格: 123 end
右对齐, 宽度为 10, 不足补空格: start 123
右对齐, 宽度为 10, 取两位小数, 不足补 0:0000022.23
包含知识点
默认左对齐可以不用就加 <
当你不指定数据类型时, 传什么类型的值都能成功格式化输出
format, 拓展使用
- print("总是显示符号:{:0>+8.2f},{:0>+8.2f}".format(3.14, -3.14))
- print("百分数:{:%} {:.2%}".format(3 / 7, 3 / 7))
- print("逗号分隔, 一般用在金钱 {:,}".format(12345678)
执行结果
总是显示符号: 000+3.14,000-3.14
百分数: 42.857143% 42.86%
逗号分隔, 一般用在金钱 12,345,678
包含知识点
+ 的意义在于, 当我们输出的是正数也能看到符号
百分数是真的百分数, 不是单单加个 % ; 譬如 0.25667, 变成百分数就是 25.67%
, 固定隔三位数字; 传入字符串会报错哦
来源: https://www.cnblogs.com/poloyy/p/12443158.html